Browse Source

feat: 交付物2

test2
xuesinan 3 years ago
parent
commit
864b0808b4
  1. 3
      CHANGELOG.md
  2. 8
      common/styles/tailwind.scss
  3. 109
      components/ReviewerSecond/ReviewerSecond.vue
  4. 5
      config/deliver.js
  5. 4
      manifest.json
  6. 385
      plugins/p-deliver-check-second/check-form-modal-second.vue
  7. 50
      plugins/p-deliver-check-second/p-deliver-check-second.vue
  8. 4
      plugins/p-deliver-second/p-deliver-second.vue
  9. 49
      plugins/p-deliver-upload-second/p-deliver-upload-second.vue

3
CHANGELOG.md

@ -1,4 +1,4 @@
# 1.0.0 (2022-04-11)
# 1.0.0 (2022-04-13)
### 🌟 新功能
范围|描述|commitId
@ -156,6 +156,7 @@
- | 向上查向下查 | [1933e1b](https://101.201.226.163:50022/ccsens_tall/TALL-MUI-4/commits/1933e1b)
- | 项目列表不能正常滚动 | [3c26b50](https://101.201.226.163:50022/ccsens_tall/TALL-MUI-4/commits/3c26b50)
- | 项目列表排序 | [ad0ce75](https://101.201.226.163:50022/ccsens_tall/TALL-MUI-4/commits/ad0ce75)
- | 项目列表长按之后位置不对 | [85749b3](https://101.201.226.163:50022/ccsens_tall/TALL-MUI-4/commits/85749b3)
- | 消息id | [f79918b](https://101.201.226.163:50022/ccsens_tall/TALL-MUI-4/commits/f79918b)
- | 小红点、上传项目刷新项目列表 | [02d933e](https://101.201.226.163:50022/ccsens_tall/TALL-MUI-4/commits/02d933e)
- | 小红点监听 | [f0f158d](https://101.201.226.163:50022/ccsens_tall/TALL-MUI-4/commits/f0f158d)

8
common/styles/tailwind.scss

@ -4620,6 +4620,10 @@
.w-32 {
width: 8rem;
}
.w-20 {
width: 5rem;
}
.w-58 {
width: 14.5rem;
@ -4628,6 +4632,10 @@
.h-16 {
height: 4rem;
}
.h-20 {
height: 5rem;
}
.break-all {
word-break: break-all;

109
components/ReviewerSecond/ReviewerSecond.vue

@ -0,0 +1,109 @@
<template>
<view class="border border-solid border-gray-300 rounded-md mt-4 p-2 pt-4 pl-1" @click="collapsed = !collapsed">
<view class="relative flex justify-between">
<view class="absolute text-sm bg-white reviewer-title">审核人</view>
<view class="flex flex-wrap">
<template v-for="(item, index) in checkers">
<u-button
v-if="index < 2"
:type="checkedCheckers.find(checker => checker.memberId === item.memberId) ? 'primary' : 'default'"
size="mini"
class="m-1"
@click="handleSelectChecker(item)"
>
{{ item.name }}
</u-button>
</template>
</view>
<!-- 展示选择的审核人 -->
<view class="flex items-center justify-end flex-1 text-sm">
<view v-for="item in showCheckers" class="mx-1">
<!-- <u-badge :is-dot="true" is-center></u-badge> -->
{{ item.name }}
</view>
<view class="mx-1" v-show="checkedCheckers.length > 3">...</view>
</view>
<!-- 点击更换图标 -->
<u-icon :name="collapsed ? 'arrow-down' : 'arrow-up'"></u-icon>
</view>
<!-- 隐藏的审核人选项 -->
<view v-show="!collapsed" class="foot mt-2 flex flex-wrap">
<template v-for="(item, index) in checkers">
<u-button
v-if="index >= 2"
:type="checkedCheckers.find(checker => checker.memberId === item.memberId) ? 'primary' : 'default'"
size="mini"
class="m-1"
@click="handleSelectChecker(item)"
>
{{ item.name }}
</u-button>
</template>
</view>
</view>
</template>
<script setup>
import { ref, computed } from 'vue';
import { useStore } from 'vuex';
const props = defineProps({
dataCheckers: {
type: Array,
default: () => [],
},
});
const store = useStore();
//
const collapsed = ref(true);
// store
//
const checkers = computed(() => store.state.role.members);
//
let checkedCheckers = ref([]);
if (props.dataCheckers) {
checkedCheckers.value = props.dataCheckers;
props.dataCheckers.forEach(item => {
item.name = item.checkerName;
item.memberId = item.checkerId;
})
}
//
const showCheckers = computed(() => (checkedCheckers.value.length > 3 ? checkedCheckers.value.slice(0, 3) : checkedCheckers.value));
defineExpose({ checkedCheckers, collapsed });
/**
* 点击成员 切换检查人的选中状态
* @param {object} member 成员对象
*/
function handleSelectChecker(member) {
const target = checkedCheckers.value.find(item => item.memberId === member.memberId);
if (target) {
//
checkedCheckers.value = checkedCheckers.value.filter(item => item.memberId !== member.memberId);
} else {
checkedCheckers.value.push(member);
}
}
</script>
<style scoped lang="scss">
.reviewer-title {
width: 60px;
height: 20px;
line-height: 20px;
text-align: center;
top: -25px;
left: 10px;
}
</style>

5
config/deliver.js

@ -3,6 +3,7 @@ export const UPLOAD_EXTENSION = ['.xls', '.xlsx', '.zip', '.exe', '.pdf', '.doc'
// 审核的快捷用语
export const quickWords = {
RESOLVE: ['加油,再接再厉!', '很棒!', '不错,很详细!', '加油,再接再厉'], // 审核通过常用的审批语
REJECT: ['不详细', '还有需要改进的地方', '驳回审批1', '驳回审批2'], // 审核驳回常用的审批语
RESOLVE: ['加油,再接再厉!', '很棒!', '不错,很详细!', '不详细', '还有需要改进的地方', '驳回审批']
// RESOLVE: ['加油,再接再厉!', '很棒!', '不错,很详细!', '加油,再接再厉'], // 审核通过常用的审批语
// REJECT: ['不详细', '还有需要改进的地方', '驳回审批1', '驳回审批2'], // 审核驳回常用的审批语
};

4
manifest.json

@ -1,8 +1,8 @@
{
"name" : "时物链条2",
"appid" : "__UNI__3CBCFFF",
"appid" : "__UNI__6207504",
"description" : "",
"versionName" : "1.0.12",
"versionName" : "1.0.13",
"versionCode" : "100",
"transformPx" : false,
/* 5+App */

385
plugins/p-deliver-check-second/check-form-modal-second.vue

@ -0,0 +1,385 @@
<template>
<!-- 审核通过的modal -->
<u-mask :show="data.mode !== 'HIDE'" @click="handleHide">
<view class="modal-content-wrap p-2" @click.stop>
<u-icon class="absolute close-btn" name="close" @click="data.mode = 'HIDE'"></u-icon>
<scroll-view scroll-y="true" style="height: 100%;">
<view class="modal-title">审核记录</view>
<p-deliver-upload-second v-if="deliverData" @upload-success="getDeliverData" @edit-success="getDeliverData"></p-deliver-upload-second>
<!-- 交付物名称 -->
<view class="mt-4 px-2 flex justify-between">
<view class="relative">
{{ deliverData ? deliverData.deliverName : '' }}审核状态
</view>
</view>
<view class="mt-1 px-2">
<view class="flex justify-between items-center">
<!-- 提交人和时间信息 -->
<view class="text-gray-400 text-xs">
<text class="mr-4" v-if="deliverData.submitMemberName">{{ deliverData.submitMemberName }}</text>
<text v-if="deliverData.submitTime"> {{ dayjs(+deliverData.submitTime).format('MM-DD HH:mm') }}</text>
</view>
</view>
<!-- 提交的链接信息 -->
<DeliverLink :link="deliverData.details[0]" v-if="deliverData.details && deliverData.details[0]" />
<!-- 审核人 标题 -->
<view class="text-gray-400 flex justify-between mt-3">
<text>审核</text>
</view>
<!-- 审核人 列表 -->
<view v-if="deliverData.checkerList">
<!-- 遍历审核人信息 -->
<template v-for="item in deliverData.checkerList">
<!-- -->
<template v-if="item.isMine === 1">
<view class="mt-2 text-sm flex justify-between">
<view>
<view class="font-semibold">{{ item.checkerName }}</view>
<view class="text-xs text-gray-400">{{ item.remark }}</view>
<view class="text-xs text-gray-400" v-if="+item.checkTime > 0">{{ dayjs(+item.checkTime).format('MM-DD HH:mm') }}</view>
</view>
<view class="time-box" v-if="item.checkDuration">
<view class="initial-duration bg-yellow-400" :style="{width: item.initialPercent + '%'}"></view>
<view class="duration bg-blue-400" :style="{width: item.currPercent + '%'}"></view>
<view class="check-duration bg-green-400" :style="{width: item.checkPercent + '%'}"></view>
</view>
<!-- 自己是审核人 且审核过 当前审核人的审核状态并展示得分情况 -->
<view v-show="item.status > 0" class="text-xs">
<view class="mb-1">
<text v-if="item.status === 1" class="text-green-600"> 已通过 </text>
<text v-else-if="item.status === 2" class="text-red-600"> 已驳回 </text>
</view>
<zwp-ring-timing mode="chart" :value="item.score" active-color="#F59E0B" :radius="30" :bar-width="4" v-if="item.score">
<text class="text-yellow-500 font-medium">{{ item.score }}</text>
</zwp-ring-timing>
</view>
</view>
<view v-if="item.status === null || item.status === 0">
<view class="border border-solid border-gray-300 rounded-md mt-3 px-2" @click="collapsed = !collapsed">
<view class="top flex justify-between">
<view class="mr-3 py-2 text-sm">工作量时长</view>
<!-- 时长 -->
<view class="flex item-center justify-end flex-1 text-sm">
<u-input v-model="checkDuration" type="text" placeholder="请输入工作量时长" class="input" style="text-align: right;"></u-input>
</view>
</view>
<view class="foot mb-2 flex flex-wrap">
<u-button :type="checkedIndex === 0 ? 'primary' : 'default'" size="mini" class="my-1 ml-0 mr-3" @click="handleSelectTime(0)">
半小时
</u-button>
<u-button :type="checkedIndex === 1 ? 'primary' : 'default'" size="mini" class="my-1 ml-0 mr-3" @click="handleSelectTime(1)">
1小时
</u-button>
<u-button :type="checkedIndex === 2 ? 'primary' : 'default'" size="mini" class="my-1 ml-0 mr-3" @click="handleSelectTime(2)">
2小时
</u-button>
</view>
</view>
<view class="mt-3 flex justify-between items-center">
<view>交付物质量</view>
<view class="flex justify-end items-center">
<u-number-box v-model="score" size="30" :max="100" :min="0" :step="1"></u-number-box>
<view class="w-20 ml-2">
<u-slider v-model="score" active-color="#34D399" :max="100" :min="0" :step="1"></u-slider>
</view>
</view>
</view>
<view class="mt-3">
<u-input class="h-20" v-model="commit" type="textarea" :border="true" :auto-height="true" />
</view>
<view class="common-list">
<view v-for="item in words" class="leading-12" @click="commit = item">
{{ item }}
</view>
</view>
<view class="mt-4 flex justify-center items-center">
<u-button class="mx-4" type="primary" @click="handleSubmit(1)">
通过
</u-button>
<u-button class="mx-4" type="error" @click="handleSubmit(2)">
驳回
</u-button>
</view>
</view>
</template>
</template>
<template v-for="item in deliverData.checkerList">
<!-- 不是我 -->
<template v-if="item.isMine !== 1">
<view class="mt-2 text-sm flex justify-between">
<view>
<view class="font-semibold">{{ item.checkerName }}</view>
<view class="text-xs text-gray-400">{{ item.remark }}</view>
<view class="text-xs text-gray-400" v-if="+item.checkTime > 0">{{ dayjs(+item.checkTime).format('MM-DD HH:mm') }}</view>
</view>
<view class="time-box" v-if="item.checkDuration">
<view class="initial-duration bg-yellow-400" :style="{width: item.initialPercent + '%'}"></view>
<view class="duration bg-blue-400" :style="{width: item.currPercent + '%'}"></view>
<view class="check-duration bg-green-400" :style="{width: item.checkPercent + '%'}"></view>
</view>
<!-- 不是自己 显示审核状态 -->
<view class="text-xs">
<text v-if="item.status === 1" class="text-green-600"> 已通过 </text>
<text v-else-if="item.status === 2" class="text-red-600"> 已驳回 </text>
<text v-else class="text-gray-400"> 待审核 </text>
</view>
</view>
</template>
</template>
</view>
</view>
<view class="py-5 px-2" v-if="listRef && listRef.length">
<view>历史记录</view>
<view class="bg-white my-2 rounded-md p-3 text-gray-400 border border-solid border-gray-300" v-for="item in listRef">
<!-- 插件名称和提交时间显示 -->
<view class="flex justify-between mb-2">
<view class="text-gray-800">{{ deliverName }}</view>
<view class="text-xs">{{ dayjs(+item.submitTime).format('MM-DD HH:mm') }}</view>
</view>
<!-- 提交的链接 -->
<DeliverLink v-if="item.details[0]" :link="item.details[0]" />
<!-- 该插件物的审核人 -->
<view class="mb-1 mt-3">审核人</view>
<view class="flex justify-between mb-2" v-for="checkItem in item.checkerList">
<view>
<view class="mb-1 text-gray-800 font-semibold">
{{ checkItem.checkerName }}
</view>
<view class="mb-1 text-xs">
{{ checkItem.remark }}
</view>
<view class="mb-1 text-xs" v-if="+checkItem.checkTime > 0">
{{ dayjs(+checkItem.checkTime).format('MM-DD HH:mm') }}
</view>
</view>
<view class="time-box" v-if="item.checkDuration">
<view class="initial-duration bg-yellow-400" :style="{width: item.initialPercent + '%'}"></view>
<view class="duration bg-blue-400" :style="{width: item.currPercent + '%'}"></view>
<view class="check-duration bg-green-400" :style="{width: item.checkPercent + '%'}"></view>
</view>
<view class="text-center text-xs">
<view v-if="checkItem.status == null" class="text-gray-400">待审核</view>
<view v-else-if="checkItem.status === 1">
<view class="text-green-600 mb-1">已通过</view>
<zwp-ring-timing mode="chart" :value="checkItem.score" active-color="#F59E0B" :radius="30" :bar-width="4">
<text class="text-yellow-500 font-medium">{{ checkItem.score }}</text>
</zwp-ring-timing>
</view>
<view class="text-red-600" v-else>已驳回</view>
</view>
</view>
</view>
</view>
</scroll-view>
</view>
</u-mask>
</template>
<script setup>
import { ref, computed, watch, inject } from 'vue';
import { useStore } from 'vuex';
import dayjs from 'dayjs';
import { quickWords } from '@/config/deliver';
const props = defineProps({
data: { type: Object, default: {} },
msgId: { default: '', type: String },
});
const emits = defineEmits(['hide', 'submit-end']);
const store = useStore();
// const words = computed(() => quickWords[props.data.mode]); //
const words = computed(() => quickWords['RESOLVE']); //
const projectId = computed(() => store.getters['project/projectId']);
const roleId = computed(() => store.state.role.roleId);
const task = inject('task');
const commit = ref(''); //
const score = ref(100); //
const deliverData = inject('deliver');
const checkDuration = ref('2小时'); //
const checkedIndex = ref(2); //
let maxDuration = ref(null);
const listRef = ref([]);
const deliverName = ref('');
watch(deliverData, () => {
linkValue.value = deliverData.value.details[0]; //
checkDuration.value = deliverData.value.duration; //
checkedIndex.value = checkDuration.value === '半小时' ? 0 : checkDuration.value === '1小时' ? 1 : checkDuration.value === '2小时' ? 2 : -1;
handleDataRender(deliverData.value.checkerList);
})
getHistory(); //
async function handleDataRender(data) {
console.log('----------', data)
console.log(typeof data)
maxDuration.value = deliverData.value.initialDuration > deliverData.value.duration ? deliverData.value.initialDuration : deliverData.value.duration;
data.checkerList.forEach(item => {
if (item.checkDuration) {
maxDuration.value = maxDuration > item.checkDuration ? maxDuration : item.checkDuration;
if (maxDuration === deliverData.value.initialDuration) {
item.initialPercent = 100;
item.currPercent = Math.floor(deliverData.value.duration / deliverData.value.initialDuration);
item.checkPercent = Math.floor(item.checkDuration / deliverData.value.initialDuration);
} else if (maxDuration === deliverData.value.duration) {
item.currPercent = 100;
item.initialPercent = Math.floor(deliverData.value.initialDuration / deliverData.value.duration);
item.checkPercent = Math.floor(item.checkDuration / deliverData.value.duration);
} else if (maxDuration === item.checkDuration) {
item.checkPercent = 100;
item.initialPercent = Math.floor(deliverData.value.initialDuration / item.checkDuration);
item.currPercent = Math.floor(deliverData.value.duration / item.checkDuration);
}
}
})
return data;
}
/**
* 提交评审信息
* 提交成功后隐藏modal 重置表单控件
* 给父组件信息 更新值
* @param {string} mode 'RESOLVE'|'REJECT'
*/
async function handleSubmit(mode) {
try {
const deliverRecordId = props.data.deliverRecordId();
const param = {
projectId: projectId.value,
roleId: roleId.value,
deliverRecordId,
type: mode,
remark: commit.value,
score: score.value,
checkDuration: checkDuration.value,
msgId: task.msgId,
};
await uni.$u.api.checkDeliver(param);
handleHide(); // +
uni.$ui.showToast('审核信息提交成功');
//
emits('submit-end', param);
} catch (error) {
console.error('error: ', error);
uni.$ui.showToast('审核信息提交失败, 请稍后重试');
}
}
//
function handleHide() {
emits('hide');
//
score.value = 100;
commit.value = '';
}
// id
async function getDeliverData() {
try {
const { id: taskId } = task;
if (!taskId) return;
const param = { taskId };
const data = await uni.$u.api.getDeliverByTaskId(param);
deliver.value = data;
} catch (error) {
console.log('error: ', error);
}
}
//
async function getHistory() {
try {
const { deliverId } = deliverData.value;
const param = { deliverId: deliverId };
const data = await uni.$u.api.getDeliverHistory(param);
deliverName.value = data.deliverName;
data.deliverRecordList.forEach(deliver => {
handleDataRender(deliver);
})
listRef.value = data.deliverRecordList;
} catch (error) {
console.log('error: ', error);
uni.$ui.showToast('获取交付物历史失败');
}
}
//
function handleSelectTime(data) {
checkedIndex.value = data;
checkDuration.value = data === 0 ? '半小时' : data === 1 ? '1小时' : '2小时';
}
</script>
<style scoped lang="scss">
.modal-content-wrap {
width: 100%;
height: 100%;
left: 0;
}
.close-btn {
width: 30px;
height: 30px;
display: flex;
justify-content: center;
align-items: center;
background-color: #FFFFFF;
right: 10px;
top: 10px;
z-index: 9;
}
.modal-title {
text-align: center;
height: 50px;
line-height: 50px;
font-size: 17px;
font-weight: bold;
}
.common-list {
view {
border-bottom: 1px solid #eee;
}
}
.time-box {
width: 100px;
view {
height: 15px;
}
}
</style>

50
plugins/p-deliver-check-second/p-deliver-check-second.vue

@ -0,0 +1,50 @@
<template>
<view class="p-3">
<!-- 交付物名称 -->
<view class="flex justify-between" @click="checkModal.mode = 'SHOW'">
<view class="relative">
{{ deliverData ? deliverData.deliverName : '' }}审核状态
</view>
<!-- 展开折叠按钮 -->
<!-- <u-icon :name="collapsed ? 'arrow-up' : 'arrow-down'"></u-icon> -->
<u-icon name="arrow-right"></u-icon>
</view>
<checkFormModal :data="checkModal" @hide="checkModal.mode = 'HIDE'" @submit-end="$emit('check-success')" />
</view>
</template>
<script setup>
import { ref, reactive, inject } from 'vue';
import checkFormModal from './check-form-modal-second.vue';
const deliverData = inject('deliver');
defineEmits(['check-success']);
const checkModal = reactive({
mode: 'HIDE', // HIDE-> RESOLVE-> REJECT->
deliverRecordId: () => (deliverData.value ? deliverData.value.deliverRecordId : ''), // id
});
//
// function openDeliverHistory() {
// const { deliverId } = deliverData.value;
// // console.log(deliverId)
// uni.navigateTo({ url: `/pages/submitLog/submitLog?deliverId=${deliverId}` });
// }
//
// function openMoreRecords() {
// const { deliverRecordId } = deliverData.value;
// uni.navigateTo({ url: `/pages/checkLog/checkLog?deliverRecordId=${deliverRecordId}` });
// }
function open() {
// console.log('open');
}
function close() {
this.show = false
// console.log('close');
}
</script>

4
plugins/p-deliver-second/p-deliver-second.vue

@ -4,11 +4,11 @@
<!-- TODO: 2022年春节为了演示所有人都能看到交付物插件 -->
<p-deliver-upload-second v-if="deliver" @upload-success="getDeliverData" class="p-2" @edit-success="getDeliverData"></p-deliver-upload-second>
<p-deliver-check
<p-deliver-check-second
v-if="deliver && deliver.details && deliver.details.length"
@check-success="getDeliverData"
class="p-2"
></p-deliver-check>
></p-deliver-check-second>
</view>
</template>

49
plugins/p-deliver-upload-second/p-deliver-upload-second.vue

@ -6,12 +6,6 @@
<view class="flex-1">
<view v-if="deliver.deliverName" class="relative inline-block">
{{ deliver.deliverName }}
<!-- <u-badge
size="mini"
:is-dot="true"
style="transform: translate3d(2em, -1em, 0)"
v-show="!deliver.details || !deliver.details.length"
></u-badge> -->
</view>
</view>
@ -74,32 +68,33 @@
<view class="border border-solid border-gray-300 rounded-md mt-3 px-2" @click="collapsed = !collapsed">
<view class="top flex justify-between">
<view class="mr-3 py-2 text-sm">工作量时长</view>
<!-- 时长 -->
<view class="flex item-center justify-end flex-1 text-sm">
<u-input v-model="duration" type="text" :border="none" placeholder="请输入工作量时长" class="input" style="text-align: right;"></u-input>
<u-input v-model="duration" type="text" placeholder="请输入工作量时长" class="input" style="text-align: right;"></u-input>
</view>
</view>
</view>
<view class="foot mt-2 flex flex-wrap">
<u-button :type="checkedIndex === 0 ? 'primary' : 'default'" size="mini" class="my-1 ml-0 mr-3" @click="handleSelectTime(0)">
半小时
</u-button>
<u-button :type="checkedIndex === 1 ? 'primary' : 'default'" size="mini" class="my-1 ml-0 mr-3" @click="handleSelectTime(1)">
1小时
</u-button>
<u-button :type="checkedIndex === 2 ? 'primary' : 'default'" size="mini" class="my-1 ml-0 mr-3" @click="handleSelectTime(2)">
2小时
</u-button>
<view class="foot mb-2 flex flex-wrap">
<u-button :type="checkedIndex === 0 ? 'primary' : 'default'" size="mini" class="my-1 ml-0 mr-3" @click="handleSelectTime(0)">
半小时
</u-button>
<u-button :type="checkedIndex === 1 ? 'primary' : 'default'" size="mini" class="my-1 ml-0 mr-3" @click="handleSelectTime(1)">
1小时
</u-button>
<u-button :type="checkedIndex === 2 ? 'primary' : 'default'" size="mini" class="my-1 ml-0 mr-3" @click="handleSelectTime(2)">
2小时
</u-button>
</view>
</view>
<!-- 插件审核人员选择 -->
<Reviewer ref="reviewerRef" />
<ReviewerSecond ref="reviewerRef" :dataCheckers="deliver.checkerList ? deliver.checkerList : []" />
</view>
</template>
<script setup>
import { ref, computed, inject } from 'vue';
import { ref, computed, inject, watch } from 'vue';
import { useStore } from 'vuex';
import { UPLOAD_URL } from '@/config/index';
import { UPLOAD_EXTENSION } from '@/config/deliver';
@ -125,6 +120,18 @@ const submitState = computed(() => !linkValue.value);
const projectId = computed(() => store.getters['project/projectId']);
const roleId = computed(() => store.state.role.roleId);
if (deliver) {
linkValue.value = deliver.value.details[0]; //
duration.value = deliver.value.duration ? deliver.value.duration : deliver.value.initialDuration; //
checkedIndex.value = duration.value === '半小时' ? 0 : duration.value === '1小时' ? 1 : duration.value === '2小时' ? 2 : -1;
}
watch(deliver, () => {
linkValue.value = deliver.value.details[0]; //
duration.value = deliver.value.duration ? deliver.value.duration : deliver.value.initialDuration; //
checkedIndex.value = duration.value === '半小时' ? 0 : duration.value === '1小时' ? 1 : duration.value === '2小时' ? 2 : -1;
})
//
function validateDeliverForm(checkedCheckers) {
const reg = /[a-zA-z]+:\/\/[^\s]*/;
@ -177,7 +184,7 @@ async function submit() {
//
function resetControlState() {
submitBtnLoading.value = false; // loading
linkValue.value = ''; //
// linkValue.value = ''; //
reviewerRef.value.collapsed = true; //
}

Loading…
Cancel
Save