Compare commits

...

12 Commits

Author SHA1 Message Date
clay ff19feec81 Merge pull request 'master' (#20) from master into pro
continuous-integration/drone/push Build is passing Details
Reviewed-on: http://git.hchyun.com/clay/workflow-engine-web/pulls/20
2023-02-20 10:24:51 +00:00
odjbin 348de04db7 Merge pull request 'DJ' (#19) from DJ into master
Reviewed-on: http://git.hchyun.com/clay/workflow-engine-web/pulls/19
2023-02-17 10:14:31 +00:00
邓洁 4bc906d350 dengjie : 解决部门选择器预览时数据回显问题 2023-02-17 18:14:01 +08:00
邓洁 f39e830478 dengjie : 解决部门选择器问题 2023-02-17 18:07:29 +08:00
odjbin e78241c710 Merge pull request 'dengjie : 时长,处理耗时的工具类date.js' (#18) from DJ into master
Reviewed-on: http://git.hchyun.com/clay/workflow-engine-web/pulls/18
2023-02-16 17:19:22 +00:00
邓洁 662c0188e8 dengjie : 时长,处理耗时的工具类date.js 2023-02-17 01:18:59 +08:00
odjbin e6b901cbbe Merge pull request 'dengjie : 解决处理耗时时间,点击预览清空表单,审批通过时tag改变问题' (#17) from DJ into master
Reviewed-on: http://git.hchyun.com/clay/workflow-engine-web/pulls/17
2023-02-16 16:53:29 +00:00
邓洁 3c470860a0 dengjie : 解决处理耗时时间,点击预览清空表单,审批通过时tag改变问题 2023-02-17 00:53:04 +08:00
odjbin ae13cebe3c Merge pull request 'dengjie : 解决上传图片/附件的组件placeholder问题' (#16) from DJ into master
Reviewed-on: http://git.hchyun.com/clay/workflow-engine-web/pulls/16
2023-02-16 11:47:02 +00:00
邓洁 f0da4f03d3 dengjie : 解决上传图片/附件的组件placeholder问题 2023-02-16 19:46:33 +08:00
odjbin 424d86ba66 Merge pull request 'dengjie : 待我处理的审批详情的必填标志*已删除,审批流程条件右边的'优先级'已删除' (#15) from DJ into master
Reviewed-on: http://git.hchyun.com/clay/workflow-engine-web/pulls/15
2023-02-16 10:29:36 +00:00
邓洁 092faccee6 dengjie : 待我处理的审批详情的必填标志*已删除,审批流程条件右边的'优先级'已删除 2023-02-16 18:27:37 +08:00
11 changed files with 232 additions and 107 deletions

View File

@ -7,11 +7,11 @@
<el-input v-model="filterText" style="width: 100%;" size="small" <el-input v-model="filterText" style="width: 100%;" size="small"
clearable placeholder="输入关键字进行过滤" prefix-icon="el-icon-search"/> clearable placeholder="输入关键字进行过滤" prefix-icon="el-icon-search"/>
</div> </div>
<!-- 部门 --> <!-- 部门 check-strictly-->
<el-empty :image-size="100" description="似乎没有数据" v-show="deptList.length === 0"/> <el-empty :image-size="100" description="似乎没有数据" v-show="deptList.length === 0"/>
<el-scrollbar style="height:350px"> <el-scrollbar style="height:350px">
<el-tree :data="deptList" ref="tree" :props="deptProps" empty-text="" node-key="deptId" default-expand-all <el-tree :data="deptList" ref="tree" :props="deptProps" empty-text="" node-key="value" default-expand-all
:show-checkbox="showCheckbox" check-strictly highlight-current :show-checkbox="showCheckbox" highlight-current :check-strictly="multiple===false"
@check-change="handleCheckChange" @node-click="(node,check)=>handle(node,check)" @check-change="handleCheckChange" @node-click="(node,check)=>handle(node,check)"
:filter-node-method="filterNode"> :filter-node-method="filterNode">
<div class="custom-tree-node" slot-scope="{ node }" style="width: 100%"> <div class="custom-tree-node" slot-scope="{ node }" style="width: 100%">
@ -20,7 +20,6 @@
</el-tree> </el-tree>
</el-scrollbar> </el-scrollbar>
</div> </div>
<div class="selected"> <div class="selected">
<div class="count"> <div class="count">
<span>已选 {{ selectList.length }} </span> <span>已选 {{ selectList.length }} </span>
@ -102,7 +101,7 @@ export default {
// const jsonb = jsona.replace(/"value"/g, '"deptId"') // // const jsonb = jsona.replace(/"value"/g, '"deptId"') //
// const jsonc = jsonb.replace(/"label"/g, '"deptName"') // const jsonc = jsonb.replace(/"label"/g, '"deptName"')
this.deptList = res.data this.deptList = res.data
console.log("获取部门信息===========", this.deptList); // console.log("===========", this.deptList);
}); });
}, },
// //
@ -123,7 +122,7 @@ export default {
// //
if (this.showCheckbox) { if (this.showCheckbox) {
// + // +
if (this.multiple) { if (this.multiple ) {
// //
for (let i = 0; i < this.selectList.length; i++) { for (let i = 0; i < this.selectList.length; i++) {
if (this.selectList[i].value === data.value) { if (this.selectList[i].value === data.value) {
@ -132,7 +131,9 @@ export default {
} }
} }
if (checked) { if (checked) {
if(data.children === undefined){
this.selectList.push(data); this.selectList.push(data);
}
} else if (data === '1') { } else if (data === '1') {
this.$refs.tree.setCheckedKeys([]); this.$refs.tree.setCheckedKeys([]);
this.selectList = []; this.selectList = [];
@ -147,10 +148,11 @@ export default {
} }
if (checked) { if (checked) {
this.$refs.tree.setCheckedNodes([data]); this.$refs.tree.setCheckedNodes([data]);
// this.$refs.tree.setCheckedKeys([]);
this.selectList = [data]; this.selectList = [data];
} else if (data === '1') { } else if (data === '1') {
this.$refs.tree.setCheckedKeys([]);
this.selectList = []; this.selectList = [];
this.$refs.tree.setCheckedKeys([]);
} }
} }
} }
@ -164,6 +166,7 @@ export default {
* @param check checked(checkbox选择框)是否选中 * @param check checked(checkbox选择框)是否选中
*/ */
handle(node, check) { handle(node, check) {
if (check.isLeaf !== false) {
if (this.multiple) { if (this.multiple) {
// //
for (let i = 0; i < this.selectList.length; i++) { for (let i = 0; i < this.selectList.length; i++) {
@ -178,6 +181,7 @@ export default {
check.checked = true check.checked = true
this.selectList = [node]; this.selectList = [node];
} }
}
this._value = this.selectList this._value = this.selectList
}, },
//,× //,×
@ -203,9 +207,10 @@ export default {
cancelButtonText: "取消", cancelButtonText: "取消",
type: "warning" type: "warning"
}).then(() => { }).then(() => {
this.handleCheckChange("1");
if (!this.showCheckbox) { if (!this.showCheckbox) {
this.selectList = [] this.selectList = []
}else {
this.handleCheckChange("1");
} }
}); });
}, },
@ -221,15 +226,15 @@ export default {
<style lang="less" scoped> <style lang="less" scoped>
@containWidth: 278px; @containWidth: 278px;
/deep/ .el-tree-node { ///deep/ .el-tree-node {
.is-leaf + .el-checkbox .el-checkbox__inner { // .is-leaf + .el-checkbox .el-checkbox__inner {
display: inline-block; // display: inline-block;
} // }
//
.el-checkbox .el-checkbox__inner { // .el-checkbox .el-checkbox__inner {
display: none; // display: none;
} // }
} //}
/deep/ .el-dialog__body { /deep/ .el-dialog__body {
padding: 10px 20px; padding: 10px 20px;

View File

@ -0,0 +1,118 @@
//时间转换为String类型
const moment = require("moment");
function simpleDateFormat(pattern) {
var fmt = new Object();
fmt.pattern = pattern;
fmt.parse = function (source) {
try {
return new Date(source);
} catch (e) {
console.log("字符串 " + source + " 转时间格式失败!");
return null;
}
};
fmt.format = function (date) {
if (typeof (date) == "undefined" || date == null || date == "") {
return "";
}
try {
date = new Date(date);
} catch (e) {
console.log("时间 " + date + " 格式化失败!");
return "";
}
var strTime = this.pattern;//时间表达式的正则
var o = {
"M+": date.getMonth() + 1, //月份
"d+": date.getDate(), //日
"H+": date.getHours(), //小时
"m+": date.getMinutes(), //分
"s+": date.getSeconds(), //秒
"q+": Math.floor((date.getMonth() + 3) / 3), //季度
"S": date.getMilliseconds() //毫秒
};
if (/(y+)/.test(strTime)) {
strTime = strTime
.replace(RegExp.$1, (date.getFullYear() + "")
.substr(4 - RegExp.$1.length));
}
for (var k in o) {
if (new RegExp("(" + k + ")").test(strTime)) {
strTime = strTime.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
}
}
return strTime;
};
return fmt;
}
//时间格式化为yyyy-MM-dd
function simpleDateFormatByMoreLine(date) {
var fmt = simpleDateFormat("yyyy-MM-dd");
date = fmt.parse(date)
return fmt.format(date)
}
/**
* @param dateBegin 开始时间
* @param dateEnd 结束时间
* @returns {string} 时间差 小时 分钟
*/
function consumingTime(dateBegin, dateEnd) {
// //如果时间格式是正确的,那下面这一步转化时间格式就可以不用了
let submitTime = new Date(dateBegin)
let endTime = new Date(dateEnd)
var dateDiff = endTime - submitTime;//时间差的毫秒数
var dayDiff = Math.floor(dateDiff / (24 * 3600 * 1000));//计算出相差天数
var leave1 = dateDiff % (24 * 3600 * 1000) //计算天数后剩余的毫秒数
var hours = Math.floor(leave1 / (3600 * 1000))//计算出小时数
//计算相差分钟数
var leave2 = leave1 % (3600 * 1000) //计算小时数后剩余的毫秒数
var minutes = Math.floor(leave2 / (60 * 1000))//计算相差分钟数
//计算相差秒数
var leave3 = leave2 % (60 * 1000) //计算分钟数后剩余的毫秒数
var seconds = Math.round(leave3 / 1000)
return dayDiff + "天 " + hours + "小时 " + minutes + " 分钟" + seconds + " 秒";
}
function timeLength(start, dateEnd) {
// //如果时间格式是正确的,那下面这一步转化时间格式就可以不用了
let mstart = moment(start);
let mend = moment(dateEnd);
let years = mend.diff(start, "years");
let months = mend.diff(start, "months");
let days = mend.diff(start, "days");
let hours = mend.diff(start, "hours");
let minutes = mend.diff(start, "minutes");
minutes = minutes % 60;
hours = hours % 24;
months = months % 12;
//因为每月天不固定,所以天要特殊动态处理
if (mstart.date() < mend.date()) {
days = mend.date() - mstart.date();
if (minutes > 0 || hours > 0) {
days--;
}
}
//处理超过俩月且天超过31
if (days > 31 && mend.month() - mstart.month() >= 2) {
//将日期推至上月求差
days = mend.diff(mstart.add(mend.month() - mstart.month() - 1, "month"), "days");
}
return `${years > 0 ? years + "年 " : " "}` + `${months > 0 ? months + "个月 " : " "}` + `${days > 0 ? days + "天 " : " "}`
+ `${hours > 0 ? hours + "小时 " : " "}` + `${minutes > 0 ? minutes + "分钟 " : " "}`;
}
module.exports = {
formatToYYYYMMDD: simpleDateFormatByMoreLine,
consumingTime: consumingTime,
timeLength: timeLength
}

View File

@ -119,6 +119,7 @@ export default {
select: null, select: null,
drag: false, drag: false,
formPreviewModel:"E", formPreviewModel:"E",
formValue:{}
} }
}, },
computed: { computed: {
@ -200,6 +201,14 @@ export default {
}, },
viewForms() { viewForms() {
this.viewFormVisible = true this.viewFormVisible = true
this.$nextTick(function(){
this.formValue=this.$refs.form.value
})
for (const key in this.formValue) {
if(this.formValue[key]!=undefined){
this.formValue[key]=[]
}
}
}, },
selectItem(cp) { selectItem(cp) {
this.selectFormItem = cp this.selectFormItem = cp

View File

@ -120,7 +120,8 @@ export const baseComponents = [
enablePrint: true, enablePrint: true,
placeholder: ['开始时间', '结束时间'], placeholder: ['开始时间', '结束时间'],
format: 'yyyy-MM-dd HH:mm', format: 'yyyy-MM-dd HH:mm',
showLength: false showLength: false,
length:0
} }
}, },
{ {
@ -134,7 +135,8 @@ export const baseComponents = [
enablePrint: true, enablePrint: true,
maxSize: 5, //图片最大大小MB maxSize: 5, //图片最大大小MB
maxNumber: 10, //最大上传数量 maxNumber: 10, //最大上传数量
enableZip: true //图片压缩后再上传 enableZip: true, //图片压缩后再上传
placeholder: '请选择图片',
} }
}, },
{ {
@ -149,7 +151,8 @@ export const baseComponents = [
onlyRead: false, //是否只读false只能在线预览true可以下载 onlyRead: false, //是否只读false只能在线预览true可以下载
maxSize: 100, //文件最大大小MB maxSize: 100, //文件最大大小MB
maxNumber: 10, //最大上传数量 maxNumber: 10, //最大上传数量
fileTypes: [] //限制文件上传类型 fileTypes: [], //限制文件上传类型,
placeholder: '请选择附件',
} }
}, },
{ {

View File

@ -78,7 +78,6 @@ export default {
if (item.name === 'SpanLayout'){ if (item.name === 'SpanLayout'){
this.loadFormConfig(item.props.items) this.loadFormConfig(item.props.items)
}else { }else {
console.log(item,!item.perm)
if (!item.perm){ if (!item.perm){
this.$set(item, 'perm', 'E') this.$set(item, 'perm', 'E')
} }

View File

@ -59,7 +59,6 @@ export default {
} }
}, },
mounted() { mounted() {
console.log(JSON.stringify(this.formItems))
this.loadFormConfig(this.formItems) this.loadFormConfig(this.formItems)
}, },
methods: { methods: {

View File

@ -14,6 +14,11 @@
:start-placeholder="placeholder[0]" :end-placeholder="placeholder[1]"/> :start-placeholder="placeholder[0]" :end-placeholder="placeholder[1]"/>
</template> </template>
<template v-else-if="perm === 'R'"> <template v-else-if="perm === 'R'">
<!-- <div v-if="type==='daterange'">-->
<!-- <span style="float:left;">{{_value[0]}}</span>-->
<!-- <span style="padding:0 9px"></span>-->
<!-- <span>{{ _value[1] }}</span>-->
<!-- </div>-->
<div> <div>
<span style="float:left;">{{ _value[0] }}</span> <span style="float:left;">{{ _value[0] }}</span>
<span style="padding:0 9px"></span> <span style="padding:0 9px"></span>
@ -22,7 +27,8 @@
</template> </template>
<div v-if="showLength" class="length"> <div v-if="showLength" class="length">
<span>时长</span> <span>时长</span>
<span>{{ timeLength }}</span> <span>{{timeLength}}</span>
<!-- <span>{{type==='daterange'? parseInt(timeLength)+1: timeLength }}</span>-->
</div> </div>
</template> </template>
</div> </div>
@ -31,7 +37,7 @@
<script> <script>
import componentMinxins from "../ComponentMinxins"; import componentMinxins from "../ComponentMinxins";
import moment from "moment"; import moment from "moment";
import {timeLength} from '@/utils/date'
export default { export default {
mixins: [componentMinxins], mixins: [componentMinxins],
name: "DateTimeRange", name: "DateTimeRange",
@ -60,6 +66,10 @@ export default {
showLength: { showLength: {
type: Boolean, type: Boolean,
default: false default: false
},
length: {
type: Number,
default: 0
} }
}, },
computed: { computed: {
@ -76,36 +86,12 @@ export default {
timeLength() { timeLength() {
// //
if (Array.isArray(this.value)) { if (Array.isArray(this.value)) {
let start = moment(this.value[0]).format(this.format.replaceAll("dd", "DD")); // let start = moment(this.value[0]).format(this.format.replaceAll("dd", "DD"));
let end = moment(this.value[1]).format(this.format.replaceAll("dd", "DD")); // let end = moment(this.value[1]).format(this.format.replaceAll("dd", "DD"));
if (start === end) { if (this.value[0] === this.value[1]) {
return "0 时长为0请确认"; return "0 时长为0请确认";
} }
let mstart = moment(start); return timeLength(this.value[0],this.value[1])
let mend = moment(end);
let years = mend.diff(start, "years");
let months = mend.diff(start, "months");
let days = mend.diff(start, "days");
let hours = mend.diff(start, "hours");
let minutes = mend.diff(start, "minutes");
minutes = minutes % 60;
hours = hours % 24;
months = months % 12;
//
if (mstart.date() < mend.date()) {
days = mend.date() - mstart.date();
if (minutes > 0 || hours > 0) {
days--;
}
}
//31
if (days > 31 && mend.month() - mstart.month() >= 2) {
//
days = mend.diff(mstart.add(mend.month() - mstart.month() - 1, "month"), "days");
}
return `${years > 0 ? years + "年 " : " "}${months > 0 ? months + "个月 " : " "}
${days > 0 ? days + "天 " : " "}${hours > 0 ? hours + "小时 " : " "}
${minutes > 0 ? minutes + "分钟 " : " "}`;
} else { } else {
return "先选择时间哦"; return "先选择时间哦";
} }

View File

@ -10,12 +10,12 @@
<org-picker type="dept" :multiple="multiple" ref="deptPicker" :v-model="select" :selected="_value" @ok="selected"/> <org-picker type="dept" :multiple="multiple" ref="deptPicker" :v-model="select" :selected="_value" @ok="selected"/>
<span class="placeholder"> {{placeholder}}</span> <span class="placeholder"> {{placeholder}}</span>
<div style="margin-top: 5px"> <div style="margin-top: 5px">
<el-tag size="mini" style="margin: 5px" closable v-for="(dept, i) in _value" :key="i" @close="delDept(i)">{{dept.deptName}}</el-tag> <el-tag size="mini" style="margin: 5px" closable v-for="(dept, i) in _value" :key="i" @close="delDept(i)">{{dept.label}}</el-tag>
</div> </div>
</template> </template>
<template v-else-if="perm === 'R'"> <template v-else-if="perm === 'R'">
<div v-for="(dept, i) in _value" :key="i"> <div v-for="(dept, i) in _value" :key="i">
{{dept.deptName}} {{dept.label}}
</div> </div>
</template> </template>
</template> </template>

View File

@ -7,7 +7,7 @@
<div class="node-body-main" @click="$emit('selected')"> <div class="node-body-main" @click="$emit('selected')">
<div class="node-body-main-header"> <div class="node-body-main-header">
<ellipsis class="title" hover-tip :content="config.name ? config.name : ('条件' + level)"/> <ellipsis class="title" hover-tip :content="config.name ? config.name : ('条件' + level)"/>
<span class="level">优先级{{ level }}</span> <!-- <span class="level">优先级{{ level }}</span>-->
<span class="option" v-if="designStart()"> <span class="option" v-if="designStart()">
<el-tooltip effect="dark" content="复制条件" placement="top"> <el-tooltip effect="dark" content="复制条件" placement="top">
<i class="el-icon-copy-document" @click.stop="$emit('copy')"></i> <i class="el-icon-copy-document" @click.stop="$emit('copy')"></i>

View File

@ -60,9 +60,8 @@
<div style="height: 15px;background:#f5f5f5;"></div> <div style="height: 15px;background:#f5f5f5;"></div>
<form-render v-if="!loading" ref="taskViewForm" :form-items="taskData.formItems" <form-render v-if="!loading" ref="taskViewForm" :form-items="taskData.formItems"
v-model="taskData.formData"/> v-model="taskData.formData"/>
<!-- <process-diagram-viewer/>-->
<div style="height: 15px;background:#f5f5f5;"></div> <div style="height: 15px;background:#f5f5f5;"></div>
<footer class="footer"> <el-footer class="footer">
<div class="footer_comment" @click="showCommentBox"> <div class="footer_comment" @click="showCommentBox">
<i class="el-icon-chat-line-round" style="font-size: 18px;"></i> <i class="el-icon-chat-line-round" style="font-size: 18px;"></i>
<span style="font-size: 12px;">评论</span> <span style="font-size: 12px;">评论</span>
@ -85,7 +84,7 @@
</el-button> </el-button>
<el-button type="primary" size="mini" round @click="submitTask()">同意</el-button> <el-button type="primary" size="mini" round @click="submitTask()">同意</el-button>
</div> </div>
</footer> </el-footer>
</div> </div>
</el-drawer> </el-drawer>
<comment ref="comment" <comment ref="comment"
@ -131,6 +130,7 @@ export default {
this.approveOpen = true; this.approveOpen = true;
this.loadProcessTask(row.taskId); this.loadProcessTask(row.taskId);
this.selectTask = row; this.selectTask = row;
}, },
getList() { getList() {
getTaskList().then(res => { getTaskList().then(res => {
@ -153,6 +153,13 @@ export default {
let that = this; let that = this;
this.init(); this.init();
getTaskInfo(taskId).then(res => { getTaskInfo(taskId).then(res => {
let data=res.data
data.formItems.map(item=>{
if(item.props.required){
item.props.required=!item.props.required
}
return item
})
that.taskData = res.data; that.taskData = res.data;
that.$store.state.design = that.taskData; that.$store.state.design = that.taskData;
that.$store.state.userTaskOption = that.taskData.userTaskOption; that.$store.state.userTaskOption = that.taskData.userTaskOption;
@ -296,15 +303,15 @@ export default {
} }
.footer { .footer {
width: 100%;
position: absolute;
bottom: 0;
left: 0;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
height: 30px; height: 30px;
padding: 15px 0; padding: 15px 0;
position: absolute;
width: 100%;
bottom: 0;
left: 0;
z-index: 99; z-index: 99;
background: #fff; background: #fff;
border-top: 1px solid #dcdfe6; border-top: 1px solid #dcdfe6;

View File

@ -57,7 +57,8 @@
<div class="top_right"> <div class="top_right">
<div style="margin-bottom: 12px"> <div style="margin-bottom: 12px">
<span style="font-size: 15px;">{{ selectProcessInstance.deploymentName }}</span> <span style="font-size: 15px;">{{ selectProcessInstance.deploymentName }}</span>
<el-tag style="font-size: 12px;margin:0 15px" size="mini">进行中</el-tag> <el-tag style="font-size: 12px;margin:0 15px;" size="mini" type="success" v-if="selectProcessInstance.state==4">审批通过</el-tag>
<el-tag style="font-size: 12px;margin:0 15px;" size="mini" v-else >进行中</el-tag>
<el-tooltip class="item" effect="dark" content="查看详细流程" placement="top-start"> <el-tooltip class="item" effect="dark" content="查看详细流程" placement="top-start">
<el-icon class="el-icon-view" style="float: right;font-size: 20px;cursor: pointer" @click.native="processDiagramViewer = true"></el-icon> <el-icon class="el-icon-view" style="float: right;font-size: 20px;cursor: pointer" @click.native="processDiagramViewer = true"></el-icon>
</el-tooltip> </el-tooltip>
@ -87,7 +88,7 @@ import Comment from "@/components/common/Comment";
import FormRenderView from '@/views/common/form/FormRender' import FormRenderView from '@/views/common/form/FormRender'
import ProcessDiagramViewer from "../admin/layout/ProcessDiagramViewer"; import ProcessDiagramViewer from "../admin/layout/ProcessDiagramViewer";
import {getInitiatedInstanceList, getInitiatedInstanceInfo} from "@/api/processInstance"; import {getInitiatedInstanceList, getInitiatedInstanceInfo} from "@/api/processInstance";
import {timeLength} from '@/utils/date'
export default { export default {
name: "InitiatedInstance", name: "InitiatedInstance",
components: {Comment, FormRenderView, ProcessDiagramViewer}, components: {Comment, FormRenderView, ProcessDiagramViewer},
@ -111,7 +112,6 @@ export default {
}, },
methods: { methods: {
clickRow(row) { clickRow(row) {
console.log(row)
this.approveOpen = true; this.approveOpen = true;
this.loadProcessInstance(row.processInstanceId) this.loadProcessInstance(row.processInstanceId)
this.selectProcessInstance = row this.selectProcessInstance = row
@ -155,9 +155,8 @@ export default {
}, },
getTimeConsuming(instance) { getTimeConsuming(instance) {
if (instance.state != 1) { if (instance.state != 1) {
let submitTime = new Date(instance.submitTime) //dateFormat(,)
let endTime = new Date(instance.endTime) return timeLength(instance.submitTime,instance.endTime);
return endTime - submitTime;
} }
} }
} }