|
@@ -5,79 +5,79 @@
|
|
|
<ion-buttons slot="start">
|
|
|
<ion-icon :icon="arrowBackOutline" @click="onCancel"></ion-icon>
|
|
|
</ion-buttons>
|
|
|
- <ion-title>工作任务详情</ion-title>
|
|
|
+ <ion-title>工作任务完成情况</ion-title>
|
|
|
</ion-toolbar>
|
|
|
</ion-header>
|
|
|
<ion-content>
|
|
|
- <form autocomplete="off">
|
|
|
- <ion-item>
|
|
|
- <div class="panel-title2">
|
|
|
- <div class="item-flag"></div>
|
|
|
- 基本信息
|
|
|
- </div>
|
|
|
- </ion-item>
|
|
|
- <ion-list>
|
|
|
- <ion-label class="title-item">任务名称</ion-label>
|
|
|
- <ion-item> <!--:class="[workTaskValid.dataModel.doTaskName.$error?'ion-invalid':'ion-valid']"-->
|
|
|
-<!-- <ion-input name="doTaskName" id="doTaskName" style="text-align: left;" class="custom"
|
|
|
- placeholder="请输入任务名称" v-model="dataModel.doTaskName" ></ion-input>-->
|
|
|
-<!-- <ion-note slot="error">任务名称不能为空</ion-note>-->
|
|
|
- {{dataModel.doTaskName}}
|
|
|
- </ion-item>
|
|
|
- <ion-label class="title-item">任务执行人员</ion-label>
|
|
|
- <ion-item>
|
|
|
- {{curTaskUserStr}}
|
|
|
- </ion-item>
|
|
|
- <ion-label class="title-item">完成时间</ion-label>
|
|
|
- <ion-item>
|
|
|
- <!--:class="[workTaskValid.dataModel.finishTime.$error?'ion-invalid':'ion-valid']"-->
|
|
|
- <!--<ion-datetime-button datetime="finishTime"></ion-datetime-button>
|
|
|
+ <div class="bw-vue-form">
|
|
|
+ <div class="form-title">工作任务详细信息</div>
|
|
|
+ <div class="form-detail">
|
|
|
+ <ion-label>任务名称</ion-label>
|
|
|
+ <ion-text>{{ dataModel.doTaskName }}</ion-text>
|
|
|
+ </div>
|
|
|
+ <div class="form-detail">
|
|
|
+ <ion-label>要求完成时间</ion-label>
|
|
|
+ <ion-text>{{ dataModel.finishTime ? dayjs(dataModel.finishTime).format("YYYY-MM-DD") : '' }}</ion-text>
|
|
|
+ </div>
|
|
|
+ <div class="form-detail">
|
|
|
+ <ion-label>任务类型</ion-label>
|
|
|
+ <ion-text>{{ dataModel.workTypeName }}</ion-text>
|
|
|
+ </div>
|
|
|
+ <div class="form-detail">
|
|
|
+ <ion-label>任务内容</ion-label>
|
|
|
+ <ion-text>{{ dataModel.content }}</ion-text>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <!-- 任务完成情况选择 -->
|
|
|
+ <div class="bw-vue-form">
|
|
|
+ <div class="form-select">
|
|
|
+ <ion-label>
|
|
|
+ 任务完成情况
|
|
|
+ </ion-label>
|
|
|
+ <ion-select name="doTypeID" id="doTypeID" interface="action-sheet" okText="确定" cancelText="取消"
|
|
|
+ v-model="dataModel.taskStatus" placeholder="请选择任务完成情况">
|
|
|
+ <ion-select-option v-for="(it,key) in taskStatusCodeList" :key="key" :value="it.value">
|
|
|
+ {{ it.name }}
|
|
|
+ </ion-select-option>
|
|
|
+ </ion-select>
|
|
|
+ </div>
|
|
|
+ <div class="form-input">
|
|
|
+ <ion-label>
|
|
|
+ 任务完成日期
|
|
|
+ </ion-label>
|
|
|
+ <div class="dateTimeBox">
|
|
|
+ <ion-datetime-button datetime="completeTime"></ion-datetime-button>
|
|
|
<ion-modal :keep-contents-mounted="true">
|
|
|
- <ion-datetime id="finishTime" placeholder="完成时间"
|
|
|
- v-model="dataModel.finishTime" :prefer-wheel="true"
|
|
|
+ <ion-datetime id="completeTime" placeholder="日期"
|
|
|
+ v-model="dataModel.completeTime" :prefer-wheel="true"
|
|
|
dataformatas="YYYY-MM-DD" presentation="date" cancel-text="取消" done-text="确定"
|
|
|
:show-default-buttons="true">
|
|
|
</ion-datetime>
|
|
|
- </ion-modal>-->
|
|
|
- <!--<ion-note slot="error">完成时间不能为空</ion-note>-->
|
|
|
- {{ dayjs(dataModel.finishTime).format("YYYY-MM-DD")}}
|
|
|
- </ion-item>
|
|
|
- <ion-label class="title-item">任务类型</ion-label>
|
|
|
- <ion-item>
|
|
|
- <!--:class="[workTaskValid.dataModel.workTypeID.$error?'ion-invalid':'ion-valid']" style="margin-bottom: 10px;">-->
|
|
|
- <!--<ion-select name="workTypeID" id="workTypeID" okText="确定" cancelText="取消" v-model="dataModel.workTypeID"
|
|
|
- interface="action-sheet" placeholder="请选择任务类型" style="width:100%;text-align: left;" >
|
|
|
- <ion-select-option v-for="(it,key) in taskTypeList" :key="key" :value="it.value" >
|
|
|
- {{ it.name }}
|
|
|
- </ion-select-option>
|
|
|
- </ion-select>-->
|
|
|
- <!--<ion-note slot="error">任务类型不能为空</ion-note>-->
|
|
|
- {{dataModel.workTypeName}}
|
|
|
- </ion-item>
|
|
|
- <ion-label class="title-item">任务内容</ion-label>
|
|
|
- <ion-item>
|
|
|
- <!--:class="[workTaskValid.dataModel.content.$error?'ion-invalid':'ion-valid']">-->
|
|
|
- <ion-textarea name="content" id="content" v-model="dataModel.content" label-placement="stacked"
|
|
|
- placeholder="请输入工作内容" rows="8" class="custom"></ion-textarea>
|
|
|
- <!--<ion-note slot="error">任务内容不能为空</ion-note>-->
|
|
|
- </ion-item>
|
|
|
- </ion-list>
|
|
|
- </form>
|
|
|
-
|
|
|
+ </ion-modal>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
</ion-content>
|
|
|
- <!--<ion-footer>
|
|
|
+ <ion-footer>
|
|
|
<ion-button shape="round" expand="block" @click="onSave">提交</ion-button>
|
|
|
- </ion-footer>-->
|
|
|
+ </ion-footer>
|
|
|
+ <ion-loading
|
|
|
+ :is-open="bodyLoading"
|
|
|
+ message="加载中..."
|
|
|
+ @didDismiss="setBodyLoadingOpen(false)">
|
|
|
+ </ion-loading>
|
|
|
</ion-page>
|
|
|
</template>
|
|
|
<script lang="ts">
|
|
|
-import {defineComponent, reactive, ref, toRefs} from "vue";
|
|
|
+import {computed, defineComponent, onMounted, reactive, ref, toRefs} from "vue";
|
|
|
import {getSysDictionaryList} from '@/api/system/dictionary';
|
|
|
-import {getMyWorkTasks,getWorkUserList} from '@/api/workTask';
|
|
|
+import {getMyWorkTasks, getWorkUserList, saveWorkTask, taskFinish} from '@/api/workTask';
|
|
|
import {useRoute, useRouter} from "vue-router";
|
|
|
-import {onIonViewDidEnter} from "@ionic/vue";
|
|
|
+import {alertController, onIonViewDidEnter} from "@ionic/vue";
|
|
|
import {arrowBackOutline} from 'ionicons/icons';
|
|
|
import dayjs from "dayjs";
|
|
|
+import {useVuelidate} from "@vuelidate/core";
|
|
|
+import {required} from "@vuelidate/validators";
|
|
|
|
|
|
interface SiteUserModel{
|
|
|
siteUserID:string,
|
|
@@ -91,6 +91,10 @@ interface workTaskModel {
|
|
|
workTypeID: any,
|
|
|
content:string,
|
|
|
finishTime:any,
|
|
|
+ workTypeName: string,
|
|
|
+ taskStatus: any,
|
|
|
+ taskStatusName: string,
|
|
|
+ completeTime: any
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -99,12 +103,6 @@ interface SelectProps {
|
|
|
value: string
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-interface CheckProps {
|
|
|
- text: string,
|
|
|
- value: string,
|
|
|
- checked: boolean
|
|
|
-}
|
|
|
export default defineComponent({
|
|
|
name: 'WorkTaskEdit',
|
|
|
setup() {
|
|
@@ -128,19 +126,27 @@ export default defineComponent({
|
|
|
workTypeID: null,
|
|
|
content:'',
|
|
|
finishTime:null,
|
|
|
+ workTypeName: '',
|
|
|
+ taskStatus: null,
|
|
|
+ taskStatusName: '',
|
|
|
+ completeTime: null
|
|
|
}});
|
|
|
- /*const workTaskRules = computed(()=>{
|
|
|
+ // 任务完成状态字典
|
|
|
+ const taskStatusCodeList = ref<Array<any>>([]);
|
|
|
+ // 页面加载动画开关
|
|
|
+ const bodyLoading = ref(false);
|
|
|
+ const workTaskRules = computed(() => {
|
|
|
return {dataModel:{
|
|
|
doTaskName:{required},
|
|
|
workTypeID:{required},
|
|
|
content:{required},
|
|
|
finishTime:{required},
|
|
|
}}});
|
|
|
- const workTaskValid = useVuelidate(workTaskRules,workTaskData);*/
|
|
|
+ const workTaskValid = useVuelidate(workTaskRules, workTaskData);
|
|
|
|
|
|
- /* const presentAlert = async (message: string) => {
|
|
|
+ const presentAlert = async (header: string, message: string) => {
|
|
|
const alert = await alertController.create({
|
|
|
- header: '错误!',
|
|
|
+ header: header,
|
|
|
message: message,
|
|
|
buttons: [
|
|
|
'确定'
|
|
@@ -148,31 +154,23 @@ export default defineComponent({
|
|
|
});
|
|
|
|
|
|
await alert.present();
|
|
|
- }*/
|
|
|
+ }
|
|
|
|
|
|
const selectTaskUser = (item:any)=>{
|
|
|
item.checked = !item.checked;
|
|
|
console.log("itemData",item);
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- /*const onSave = async function (){
|
|
|
- const isFormCorrect = await workTaskValid.value.$validate();
|
|
|
- if(!isFormCorrect) {
|
|
|
- console.log("当前数据", workTaskData.dataModel);
|
|
|
- await presentAlert("请填写完整的信息!");
|
|
|
- return null;
|
|
|
- }
|
|
|
- curTaskUserList.value =[];
|
|
|
- saveWorkTask(workTaskData.dataModel).then(result => {
|
|
|
+ function onSave() {
|
|
|
+ taskFinish(workTaskData.dataModel.doTaskID, workTaskData.dataModel.completeTime).then(result => {
|
|
|
if (result) {
|
|
|
- router.push("./list");
|
|
|
+ router.go(-1);
|
|
|
}
|
|
|
- });
|
|
|
- }*/
|
|
|
+ })
|
|
|
+ }
|
|
|
|
|
|
const onCancel = () => {
|
|
|
- router.push("./list");
|
|
|
+ router.go(-1);
|
|
|
}
|
|
|
|
|
|
const getWorkTypeList = async function(){
|
|
@@ -194,6 +192,8 @@ export default defineComponent({
|
|
|
}
|
|
|
|
|
|
const loadData = async (doTaskID: any) => {
|
|
|
+ bodyLoading.value = true;
|
|
|
+
|
|
|
curTaskUserStr.value ="";
|
|
|
await getWorkTypeList();
|
|
|
await loadCurTaskUserList(doTaskID);
|
|
@@ -201,6 +201,8 @@ export default defineComponent({
|
|
|
const reqData = await getMyWorkTasks(searchParamsState);
|
|
|
workTaskData.dataModel = reqData.list[0];
|
|
|
console.log("初始化dataModel",workTaskData.dataModel);
|
|
|
+
|
|
|
+ bodyLoading.value = false;
|
|
|
};
|
|
|
|
|
|
const reload = (doTaskID: any) => {
|
|
@@ -208,11 +210,23 @@ export default defineComponent({
|
|
|
loadData(doTaskID);
|
|
|
}
|
|
|
|
|
|
+ // 设置加载动画状态
|
|
|
+ function setBodyLoadingOpen(value: boolean) {
|
|
|
+ bodyLoading.value = value;
|
|
|
+ }
|
|
|
+
|
|
|
onIonViewDidEnter(() => {
|
|
|
if (route.query.reload)
|
|
|
reload(route.query.doTaskID);
|
|
|
});
|
|
|
|
|
|
+ onMounted(() => {
|
|
|
+ // 获取任务完成状态字典数据
|
|
|
+ getSysDictionaryList("TaskStatusType").then((result: any) => {
|
|
|
+ taskStatusCodeList.value = result;
|
|
|
+ })
|
|
|
+ })
|
|
|
+
|
|
|
|
|
|
return {
|
|
|
...toRefs(workTaskData),
|
|
@@ -225,10 +239,13 @@ export default defineComponent({
|
|
|
curTaskUserStr,
|
|
|
selectTaskUser,
|
|
|
loadData,
|
|
|
- /*onSave,*/
|
|
|
+ onSave,
|
|
|
onCancel,
|
|
|
- dayjs
|
|
|
- /*workTaskValid*/
|
|
|
+ dayjs,
|
|
|
+ workTaskValid,
|
|
|
+ taskStatusCodeList,
|
|
|
+ bodyLoading,
|
|
|
+ setBodyLoadingOpen
|
|
|
}
|
|
|
}
|
|
|
});
|
|
@@ -248,5 +265,11 @@ export default defineComponent({
|
|
|
font-size: 16px;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+.dateTimeBox {
|
|
|
+ width: 100%;
|
|
|
+ display: flex;
|
|
|
+ margin-top: 5px;
|
|
|
+ justify-content: space-between;
|
|
|
+ align-content: center;
|
|
|
+}
|
|
|
</style>
|