diff --git a/packageB/priority/allocate.vue b/packageB/priority/allocate.vue index 64c6b04..581c175 100644 --- a/packageB/priority/allocate.vue +++ b/packageB/priority/allocate.vue @@ -1,42 +1,43 @@ @@ -45,60 +46,55 @@ import { inject, ref, reactive } from 'vue'; import { onLoad } from '@dcloudio/uni-app'; const { $api, navTo, navBack } = inject('globalFunction'); import config from "@/config.js" +import targetPersonelChoice from './components/targetPersonnelChoice.vue' const title = ref(''); +const taskTypeOptions=ref([]) +const priorityOptions=ref([]) +const executeDeptOptions=ref([]) const formData = reactive({ + id: '', + taskId: '', taskName: '', - taskType: '', - priority: '', - taskAllocation: { - goalPersonCount: null, - executeDeptId: '', - executeDeptName: '', - executeDeptAncestors: '', - allocationStatus: '1', - allocationNote: '', - deadline: null, - goalPersonList: [] - } + createBy: '', + goalPersonCount: null, + executeDeptId: '', + executeDeptName: '', + executeDeptAncestors: '', + allocationStatus: '1', + allocationNote: '', + deadline: null, + goalPersonList: [], + allocationId:'' }) -const personInfo=ref({ - goalPersonId:'', - name:'', - taskType:'', - task_id:'' -}) -const followWays = ref([]) -const followList = ref([]) -const followListNum=ref(0) // 表单引用 const formRef = ref(null) // 校验规则 const rules = { - followDate: { + taskName: { rules: [{ required: true, - errorMessage: '请选择跟进日期' + errorMessage: '请填写任务名称' }] }, - followWay: { + goalPersonCount: { rules: [{ required: true, - errorMessage: '请选择跟进方式' + errorMessage: '请选择目标人员' }] }, - content: { + executeDeptId: { rules: [{ required: true, - errorMessage: '请填写跟进内容' + errorMessage: '请选择执行区域' }] }, - result: { + deadline:{ rules: [{ required: true, - errorMessage: '请填写跟进结果' + errorMessage: '请选择截止时间' }] - } + }, } const baseUrl = config.imgBaseUrl const getBackgroundStyle = (imageName) => ({ @@ -107,77 +103,84 @@ const getBackgroundStyle = (imageName) => ({ backgroundPosition: 'center', // 居中 backgroundRepeat: 'no-repeat' }); - -const onFollowDateChange = (e)=>{ - formData.followDate=e +const showVue=ref('main') +function choicePerson(){ + showVue.value='choice' } -const onMethodChange = (e) => { - formData.followWay=e -} -// 事件处理 -const onDateChange = ( e) => { - formData.nextContactDate=e -} -function getFollowList(){ +function listNotParam(){ let header={ - 'Authorization':uni.getStorageSync('fourLevelLinkage-token'), + 'Authorization':uni.getStorageSync('Padmin-Token'), 'Content-Type': "application/x-www-form-urlencoded" } - let params={ - personId:personInfo.value.person_id, - taskId:personInfo.value.task_id - } - $api.myRequest('/dispatch/assist/records/getFollowList', params,'get',9100,header).then((resData) => { - console.log("resData",resData) - if(resData && resData.code == 200){ - if(resData.data && resData.data.length>0){ - followListNum.value=resData.data.length - resData.data.forEach(item=>{ - const obj={ - title:item.followDate, - desc:`跟进方式:${getFollowWaysLabelByValue(item.followWay)}\n跟进人:${item.createByName}\n跟进内容:${item.content}` - } - followList.value.push(obj) - }) - } - - } - }); -} - -function getDictionary(){ - $api.myRequest('/system/public/dict/data/type/assist_follow_way').then((resData) => { + let params={} + $api.myRequest('/dispatch/dept/listNotParam',params,'get',9100,header).then((resData) => { if(resData && resData.code == 200){ resData.data.forEach(item=>{ const obj = { - value: item.dictValue, - text: item.dictLabel + value: item.deptId, + text: item.deptName, + ancestors:item.ancestors } - followWays.value.push(obj) + executeDeptOptions.value.push(obj) }) } }); } -function getFollowWaysLabelByValue(value) { - if (!Array.isArray(followWays.value)) { +// 事件处理 +function onDateChange(e){ + formData.deadline=e +} +function executeDeptChange(e){ + formData.executeDeptId=e + formData.executeDeptName=getLabelByValue(e,executeDeptOptions.value) + formData.executeDeptAncestors=getAncestorsByValue(e,executeDeptOptions.value) +} +function getLabelByValue(value,arr) { + if (!Array.isArray(arr)) { return '' - } - const item = followWays.value.find(item => item.value === String(value)) - return item ? item.text : '暂无跟进方式' + } + + const item = arr.find(item => item.value === value) + return item ? item.text : '暂无' +} +function getAncestorsByValue(value,arr){ + if (!Array.isArray(arr)) { + return '' + } + + const item = arr.find(item => item.value === value) + return item ? item.ancestors : '' +} +function normalizePersonData(dataList) { + if (!Array.isArray(dataList)) return []; + return dataList.map(obj => { + const fullValue = obj; + return { + personId: String(fullValue) // 确保转为字符串,防止意外类型 + }; + }); +} + +function handleShowVueChange(newValue){ + showVue.value=newValue.showVue + if(newValue.selectedPersonIds&&newValue.selectedPersonIds.length>0){ + formData.goalPersonList=normalizePersonData(newValue.selectedPersonIds) + formData.goalPersonCount=newValue.selectedPersonIds.length + }else{ + + } } const handleSubmit = () => { formRef.value?.validate() .then(() => { let header={ - 'Authorization':uni.getStorageSync('fourLevelLinkage-token') + 'Authorization':uni.getStorageSync('Padmin-Token') } - formData.goalPersonId=personInfo.value.goalPersonId - $api.myRequest('/dispatch/assist/records/addRecords', formData,'post',9100,header).then((resData) => { - console.log("resData",resData) + $api.myRequest('/dispatch/assist/task/allocation/allocate', formData,'post',9100,header).then((resData) => { if(resData && resData.code == 200){ - handleReset() + handleCancel() uni.showToast({ - title: '保存成功', + title: '分配成功', icon: 'success', duration: 2000 }); @@ -196,21 +199,40 @@ const handleSubmit = () => { }); }; -const handleReset = () => { - formData.followDate = ''; - formData.followWay = ''; - formData.content = ''; - formData.result = ''; - formData.nextPlan = ''; - formData.nextContactDate = ''; +const handleCancel = () => { + formData.taskName='' + formData.goalPersonCount=null + formData.executeDeptId='' + formData.executeDeptName='' + formData.executeDeptAncestors='' + formData.allocationStatus='1' + formData.allocationNote='' + formData.deadline=null + formData.goalPersonList=[] + navTo('/packageB/priority/taskAssignment'); +} +function getDetail(id){ + let header={ + 'Authorization':uni.getStorageSync('Padmin-Token'), + 'Content-Type': "application/x-www-form-urlencoded" + } + let params={ + id:id + } + $api.myRequest('/dispatch/assist/task/getTask',params,'get',9100,header).then((resData) => { + formData.id=resData.data.taskAllocation.id + formData.taskName=resData.data.taskName + formData.createBy=resData.data.createBy + formData.deadline=resData.data.taskAllocation.deadline + formData.allocationNote=resData.data.taskAllocation.allocationNote + formData.executeDeptAncestors=resData.data.taskAllocation.executeDeptAncestors + formData.allocationId=resData.data.taskAllocation.id + formData.taskId=resData.data.taskAllocation.taskId + }); } onLoad((options) => { - // personInfo.value.person_id=options.person_id - // personInfo.value.name=options.name - // personInfo.value.taskType=options.taskType - // personInfo.value.task_id=options.task_id - // getDictionary() - // getFollowList() + listNotParam() + getDetail(options.id) }); @@ -220,33 +242,6 @@ onLoad((options) => { image height: 100% width: 100% -.info-box - margin: 30rpx 30rpx - background: linear-gradient(0deg, #D9ECFF 0%, #F0F7FF 100%) - border-radius: 20rpx - padding: 40rpx 0 - display: flex - align-items: center -.info-img - width: 40rpx - height: 40rpx - margin-bottom: 20rpx -.info-line - border-right: 2rpx solid #B7D6FF -.info-item - display: flex - flex-direction: column - align-items: center - justify-content: center - width: 50% -.info-label - font-size: 26rpx - color: #6E7E9B - margin-bottom: 20rpx -.info-value - font-weight: bold - font-size: 28rpx - color: #3D61AC .main-list background-color: #ffffff padding: 20rpx 20rpx 28rpx 20rpx @@ -271,20 +266,6 @@ image height: 8rpx background: linear-gradient(90deg, #FFAD58 0%, #FF7A5B 100%) border-radius: 4rpx -.title-total - font-size: 24rpx - color: #999999 -.total-num - color: #3088FF - margin-left: 4rpx - margin-right: 4rpx - font-weight: bold - font-size: 26rpx - -.label - width: 160rpx - font-size: 28rpx - color: #404040 .input, .picker @@ -292,10 +273,8 @@ image .picker-value color: #666 -.list-box - margin-top: 40rpx - -.form-container + +.form-container margin-top: 30rpx :deep(.uni-forms-item__label) width: 194rpx !important @@ -324,35 +303,15 @@ image background-color: #368BFF; color: white; } -:deep(.uni-steps__column-circle ) - width: 24rpx !important - height: 24rpx !important - background: radial-gradient(circle, - #00C0FA 0%, - #015EEA 50%, - #FFFFFF 51%, - #FFFFFF 100%) !important - border-radius: 50% - border: 2rpx solid #015EEA -:deep(.uni-steps__column-title) - font-size: 28rpx !important - color: #006CFF !important - margin-bottom: 24rpx -:deep(.uni-steps__column-desc) - font-size: 28rpx - color: #898989 !important - line-height: 1.5 -:deep(.uni-steps__column-text ) - padding: 16rpx 0 !important - border: none -:deep(.uni-steps__column-line) - background-color: #368BFF !important -:deep(.uni-steps__column-line--before) - background-color:rgba(0,0,0,0) !important -:deep(.uni-date-x) - background: rgba(0,0,0,0) !important -:deep(.uni-stat-box) - background: rgba(0,0,0,0) !important +.choice-btn{ + width: 100%; + height: 70rpx; + font-size: 28rpx; + border-radius: 8rpx; + background-color: #368BFF; + color: white; + margin-left: 0; +} :deep(.uni-easyinput__content) background: rgba(0,0,0,0) !important diff --git a/packageB/priority/components/targetPersonnel.vue b/packageB/priority/components/targetPersonnel.vue index 4e9ff75..d7beb66 100644 --- a/packageB/priority/components/targetPersonnel.vue +++ b/packageB/priority/components/targetPersonnel.vue @@ -233,6 +233,7 @@ const handleCancel = () => { emit('update:showView', 'main') } function getDataList(){ + console.log("props.currentItem",props.currentItem) let header={ 'Authorization':uni.getStorageSync('Padmin-Token'), 'Content-Type': "application/x-www-form-urlencoded" diff --git a/packageB/priority/components/targetPersonnelChoice.vue b/packageB/priority/components/targetPersonnelChoice.vue index 428f750..2f95745 100644 --- a/packageB/priority/components/targetPersonnelChoice.vue +++ b/packageB/priority/components/targetPersonnelChoice.vue @@ -197,8 +197,16 @@ import { onLoad } from '@dcloudio/uni-app'; const { $api, navTo, navBack } = inject('globalFunction'); import config from "@/config.js" +const props = defineProps({ + allocationId:{ + type: String, + required: false, + default: '' + }, +}) const title = ref(''); const formData = reactive({ + allocationId:'', name: '', idCard: '', tagId: '', @@ -219,7 +227,7 @@ const getBackgroundStyle = (imageName) => ({ backgroundPosition: 'center', // 居中 backgroundRepeat: 'no-repeat' }); -const emit = defineEmits(['update:showView']) +const emit = defineEmits(['update:showVue']) function getDictionary(){ $api.myRequest('/system/public/dict/data/type/person_database_status').then((resData) => { if(resData && resData.code == 200){ @@ -269,13 +277,18 @@ function getabelByValue(value,arr) { return item ? item.text : '暂无' } const handleCancel = () => { - emit('update:showView', 'main') + emit('update:showVue', { + showVue: 'main', + selectedPersonIds: [] + }); + // emit('update:showVue', 'main') } function handleSearch(){ dataList.value=[] getDataList() } function handleReset(){ + formData.allocationId='' formData.name='' formData.idCard='' formData.tagId='' @@ -286,11 +299,20 @@ function handleReset(){ getDataList() } function getDataList(){ + let url='' + if(props.allocationId){ + formData.allocationId=props.allocationId + url='/dispatch/assist/person/database/pageAllocatePersonList' + }else{ + url='/dispatch/assist/person/database/pageList' + } + + let header={ 'Authorization':uni.getStorageSync('Padmin-Token'), 'Content-Type': "application/x-www-form-urlencoded" } - $api.myRequest('/dispatch/assist/person/database/pageList',formData,'get',9100,header).then((resData) => { + $api.myRequest(url,formData,'get',9100,header).then((resData) => { resData.rows.forEach(item=>{ item.tags=item.tagName.split(',') item.assistStatus=getabelByValue(item.assistStatus,personDatabaseStatusOptions) @@ -318,8 +340,8 @@ function selectItem(item) { } // 获取选中的数据 function handlesubmit() { - emit('update:showView', { - showView: 'main', + emit('update:showVue', { + showVue: 'main', selectedPersonIds: selectedPersonIds.value }); } diff --git a/packageB/priority/components/taskCreated.vue b/packageB/priority/components/taskCreated.vue index e10b7b3..d926fa5 100644 --- a/packageB/priority/components/taskCreated.vue +++ b/packageB/priority/components/taskCreated.vue @@ -1,6 +1,6 @@ @@ -49,6 +52,7 @@ import { inject, ref, reactive } from 'vue'; import { onLoad } from '@dcloudio/uni-app'; const { $api, navTo, navBack } = inject('globalFunction'); import config from "@/config.js" +import targetPersonelChoice from './targetPersonnelChoice.vue' const props = defineProps({ taskTypeOptions: { @@ -105,19 +109,19 @@ const rules = { errorMessage: '请选择优先级' }] }, - goalPersonCount: { + 'taskAllocation.goalPersonCount': { rules: [{ required: true, errorMessage: '请选择目标人员' }] }, - executeDeptId: { + 'taskAllocation.executeDeptId': { rules: [{ required: true, errorMessage: '请选择执行区域' }] }, - deadline:{ + 'taskAllocation.deadline':{ rules: [{ required: true, errorMessage: '请选择截止时间' @@ -131,25 +135,71 @@ const getBackgroundStyle = (imageName) => ({ backgroundPosition: 'center', // 居中 backgroundRepeat: 'no-repeat' }); +const showVue=ref('main') const emit = defineEmits(['update:showView']) - +function choicePerson(){ + showVue.value='choice' +} // 事件处理 -function onDateChange(){} -function taskTypeChange(){} -function priorityChange(){} -function executeDeptChange(){} +function onDateChange(e){ + formData.taskAllocation.deadline=e +} +function taskTypeChange(e){ + formData.taskType=e +} +function priorityChange(e){ + formData.priority=e +} +function executeDeptChange(e){ + formData.taskAllocation.executeDeptId=e + formData.taskAllocation.executeDeptName=getLabelByValue(e,props.executeDeptOptions) + formData.taskAllocation.executeDeptAncestors=getAncestorsByValue(e,props.executeDeptOptions) +} +function getLabelByValue(value,arr) { + if (!Array.isArray(arr)) { + return '' + } + + const item = arr.find(item => item.value === value) + return item ? item.text : '暂无' +} +function getAncestorsByValue(value,arr){ + if (!Array.isArray(arr)) { + return '' + } + + const item = arr.find(item => item.value === value) + return item ? item.ancestors : '' +} +function normalizePersonData(dataList) { + if (!Array.isArray(dataList)) return []; + return dataList.map(obj => { + const fullValue = obj; + return { + personId: String(fullValue) // 确保转为字符串,防止意外类型 + }; + }); +} +function handleShowVueChange(newValue){ + showVue.value=newValue.showVue + if(newValue.selectedPersonIds&&newValue.selectedPersonIds.length>0){ + formData.taskAllocation.goalPersonList = normalizePersonData(newValue.selectedPersonIds) + formData.taskAllocation.goalPersonCount=newValue.selectedPersonIds.length + }else{ + + } +} const handleSubmit = () => { formRef.value?.validate() .then(() => { let header={ - 'Authorization':uni.getStorageSync('fourLevelLinkage-token') + 'Authorization':uni.getStorageSync('Padmin-Token') } - $api.myRequest('/dispatch/assist/records/addRecords', formData,'post',9100,header).then((resData) => { - console.log("resData",resData) + $api.myRequest('/dispatch/assist/task/add', formData,'post',9100,header).then((resData) => { if(resData && resData.code == 200){ - handleReset() + handleCancel() uni.showToast({ - title: '保存成功', + title: '创建成功', icon: 'success', duration: 2000 }); diff --git a/packageB/priority/taskAssignment.vue b/packageB/priority/taskAssignment.vue index a4d74a3..bae44de 100644 --- a/packageB/priority/taskAssignment.vue +++ b/packageB/priority/taskAssignment.vue @@ -176,7 +176,7 @@ - + @@ -184,9 +184,9 @@ - + @@ -201,7 +201,7 @@ import { inject, ref, reactive } from 'vue'; import { onLoad } from '@dcloudio/uni-app'; const { $api, navTo, navBack } = inject('globalFunction'); import config from "@/config.js" -import taskCreated from './components/taskCreated.vue'; +// import taskCreated from './components/taskCreated.vue'; import taskDetail from './components/taskDetail.vue'; import targetPersonnel from './components/targetPersonnel.vue'; @@ -246,7 +246,8 @@ function listNotParam(){ resData.data.forEach(item=>{ const obj = { value: item.deptId, - text: item.deptName + text: item.deptName, + ancestors:item.ancestors } executeDeptOptions.value.push(obj) }) @@ -357,13 +358,14 @@ const handleReset = () => { } function handleShowViewChange(newValue) { showView.value = newValue + dataList.value=[] + getDataList() } const creatTask = () => { - showView.value='add' - // navTo('/packageB/priority/taskCreated'); + navTo('/packageB/priority/taskCreated'); } -const goRecommend = () =>{ - navTo('/packageB/priority/allocate'); +function goRecommend(item){ + navTo('/packageB/priority/allocate?id='+item.id); } function goDetail(item){ currentItem.value=item.id diff --git a/pages.json b/pages.json index 21a0444..0c8dad9 100644 --- a/pages.json +++ b/pages.json @@ -445,6 +445,12 @@ "navigationBarTitleText": "帮扶任务分配" } }, + { + "path": "priority/taskCreated", + "style": { + "navigationBarTitleText": "创建任务" + } + }, { "path": "priority/taskIssue", "style": {