miaofuhao il y a 7 mois
Parent
commit
1d1b02ff41

+ 10 - 1
src/utils/commonDic.js

@@ -335,4 +335,13 @@ export const taskResults = [{
335 335
         end: true,
336 336
         // error: true,
337 337
     },
338
-];
338
+];
339
+// 0 未开始 1 进行中 2 终止 3 已完成 4 异常随访  5 待填报*/
340
+export const taskMsgResults = {
341
+    0: { title: '未开始', color: '#909399',  value: '' },
342
+    1: { title: '进行中', color: '#eebe77',  value: '正常接听', end: true, },
343
+    2: { title: '终止',  color: '#F56C6C',   value: '正常接听', end: true, },
344
+    3: { title: '已完成', color: '#67C23A',  value: '正常接听',  end: true, },
345
+    4: { title: '异常随访', color: '#F56C6C', value: '正常接听',  end: true, },
346
+    5: { title: '待填报',  color: '#E6A23C',  value: '正常接听',  end: true, }
347
+  };

+ 21 - 7
src/views/main/followUp/followUpTask/cpns/visitDetails.vue

@@ -22,11 +22,11 @@
22 22
                         周期:{{ getTimeFrame(planDetail.beginEffective, planDetail.endEffective) }}
23 23
                     </div>
24 24
                 </div>
25
-                <div class="content-form">
25
+                <div class="content-form"  v-show="planDetail.way && planDetail.way === 1">
26 26
                     <el-form-item label="结果">
27 27
                         <el-radio-group v-model="form.state">
28 28
                             <el-radio :value="item.value" size="large"
29
-                                v-for="item in taskResults.filter((o) => { return !!o.value })" :key="item.value">
29
+                                v-for="item in (taskResults && taskResults.filter((o) => { return !!o.value }))" :key="item.value">
30 30
                                 {{ item.title  }}
31 31
                             </el-radio>
32 32
                         </el-radio-group>
@@ -34,7 +34,7 @@
34 34
                     <el-form-item label="标签">
35 35
                         <el-radio-group v-model="form.resultLabel">
36 36
                             <el-radio :value="item.value" size="large"
37
-                                v-for="item in resultLabels.filter((o) => { return !!o.value })" :key="item.value">
37
+                                v-for="item in resultLabels && resultLabels.filter((o) => { return !!o.value })" :key="item.value">
38 38
                                 {{ item.title  }}
39 39
                             </el-radio>
40 40
                         </el-radio-group>
@@ -52,7 +52,7 @@
52 52
                         <div>
53 53
                             <span v-for="(node, index) in msgContent" :key="index">
54 54
                               <el-tag v-if="node.isTag" @click="node.click">{{ node.content }}</el-tag>
55
-                              <el-link type="primary" v-if="node.isLink" @click="node.click" style="line-height: 24px;">{{ node.content }}</el-link>
55
+                              <el-link type="primary" v-if="node.isLink" @click="handleQuestion" style="line-height: 24px;">{{ node.content }}</el-link>
56 56
                               <span v-if="!node.isTag && !node.isLink" v-html="node.content"></span>
57 57
                             </span>
58 58
                            
@@ -60,13 +60,14 @@
60 60
                     </div>
61 61
 
62 62
                     <!-- 问卷组件 -->
63
-                    <question v-if="planDetail.way === 1 && isParentMounted && (planDetail.way === 1 || (planDetail.messageType === 1 && planDetail.messageParameter))" ref="questionRef"
63
+                    <question v-if="isParentMounted && (planDetail.way === 1 || (planDetail.messageType === 1 && planDetail.messageParameter))" ref="questionRef"
64 64
                         :surveyId="planDetail.questionnaire || planDetail.messageParameter" :userId="taskDetail.patientFiles" :taskId="taskDetail.patientTaskId"></question>
65 65
                 </div>
66 66
                 <div class="content-submit" v-if="taskDetail.state === 1 && planDetail.way === 1 && planDetail.executionMethod === 1">
67 67
                     <el-button @click="handleCreat">创建工单</el-button>
68 68
                     <el-button type="primary" @click="submit">提交</el-button>
69 69
                 </div>
70
+                <!-- && planDetail.way !== 2 -->
70 71
                 <div class="content-submit" v-if="taskDetail.state === 3">
71 72
                     <el-button type="primary" @click="submit">保存</el-button>
72 73
                 </div>
@@ -102,6 +103,8 @@ import useUserStore from '@/store/modules/user'
102 103
 import { matchTags } from '@/utils/sms'
103 104
 import useSelectStore from '@/store/commonSelect/common';
104 105
 
106
+import { createPageData, } from '@/api/main/system/system';
107
+
105 108
 import { getPlanInfo } from '@/api/patient/plan';
106 109
 import { getTaskInfo, submitTaskResult } from '@/api/patient/task';
107 110
 import { smsDetail } from '@/api/system/sms'
@@ -258,6 +261,10 @@ const submit = () => {
258 261
     // if (planDetail.value.way === 1) {
259 262
         params = questionRef.value.getParams();
260 263
     }
264
+    if (planDetail.value.way === 2) {
265
+    // if (planDetail.value.way === 1) {
266
+        params = questionRef.value.getParams();
267
+    }
261 268
     console.log(params, 'params');
262 269
     
263 270
     if (!params &&  form.value.state === '正常接听') return;
@@ -296,7 +303,7 @@ const submit = () => {
296 303
 
297 304
     console.log(resultParams)
298 305
     console.log(params)
299
-    // return
306
+    
300 307
     //TODO: 增加判断,电话类型的如果接通,必须挂点电话之后才可以提交
301 308
     submitTaskResult({  
302 309
         ...resultParams,
@@ -324,7 +331,14 @@ const submit = () => {
324 331
 // 发送短信
325 332
 const sendMessage = () => {
326 333
     //TODO: 组装短信,并发送短信
327
-   
334
+   console.log(taskDetail.value.patientTaskId)
335
+   const  params = {
336
+        taskId: taskDetail.value.patientTaskId,
337
+   }
338
+   createPageData('/SfPlanPatient/sfplanpatient/submitsms?taskId='+taskDetail.value.patientTaskId).then((data) => {
339
+        proxy.$modal.msgSuccess('发送成功!');
340
+
341
+    })
328 342
     // 点击发送成功之后,需要更改状态
329 343
 }
330 344
 const scoketDatas = ref({});

+ 451 - 0
src/views/main/followUp/followUpTask/cpns/visitDetails2.vue

@@ -0,0 +1,451 @@
1
+<template>
2
+    <div class="wrap">
3
+        <div class="descripEle">
4
+            <div class="title">
5
+                <span class="title-text">{{ planDetail.name }}</span>
6
+                <div class="title-btn">
7
+                    <el-button :type="taskStatusMap[taskDetail.state].color" size="small"
8
+                        v-if="taskStatusMap[taskDetail.state]">{{ taskStatusMap[taskDetail.state].title }}</el-button>
9
+                </div>
10
+                <div class="btn-call">
11
+                    <el-button @click="callPhone" v-if="planDetail.way === 1 && planDetail.executionMethod === 1" :icon="Phone">呼叫</el-button>
12
+                    <el-button @click="sendMessage" v-if="planDetail.way === 2 && planDetail.executionMethod === 1" :icon="Message">发送</el-button>
13
+                </div>
14
+            </div>
15
+            <div class="content">
16
+                <div class="content-info" v-if="planDetail.describes">{{ planDetail.describes }}</div>
17
+                <div class="content-item">
18
+                    <div class="item1">
19
+                        更新时间:{{ planDetail.updateTime || planDetail.createTime }}
20
+                    </div>
21
+                    <div class="item2">
22
+                        周期:{{ getTimeFrame(planDetail.beginEffective, planDetail.endEffective) }}
23
+                    </div>
24
+                </div>
25
+                <div class="content-form">
26
+                    <el-form-item label="结果">
27
+                        <el-radio-group v-model="form.state">
28
+                            <el-radio :value="item.value" size="large"
29
+                                v-for="item in taskResults.filter((o) => { return !!o.value })" :key="item.value">
30
+                                {{ item.title  }}
31
+                            </el-radio>
32
+                        </el-radio-group>
33
+                    </el-form-item>
34
+                    <el-form-item label="标签">
35
+                        <el-radio-group v-model="form.resultLabel">
36
+                            <el-radio :value="item.value" size="large"
37
+                                v-for="item in resultLabels.filter((o) => { return !!o.value })" :key="item.value">
38
+                                {{ item.title  }}
39
+                            </el-radio>
40
+                        </el-radio-group>
41
+                    </el-form-item>
42
+                    <el-form-item label="备注">
43
+                        <el-input v-model="form.desc" type="textarea" />
44
+                    </el-form-item>
45
+                </div>
46
+                <div class="content-questionnaire">
47
+                    
48
+                    <!-- 短信内容 -->
49
+                    <!--TODO: 等添加的组件写完直接照抄-->
50
+                    <div v-if="planDetail.way === 2">
51
+                        <div style="margin-bottom: 10px;"><el-text tag="b">短信内容</el-text></div>
52
+                        <div>
53
+                            <span v-for="(node, index) in msgContent" :key="index">
54
+                              <el-tag v-if="node.isTag" @click="node.click">{{ node.content }}</el-tag>
55
+                              <el-link type="primary" v-if="node.isLink" @click="node.click" style="line-height: 24px;">{{ node.content }}</el-link>
56
+                              <span v-if="!node.isTag && !node.isLink" v-html="node.content"></span>
57
+                            </span>
58
+                           
59
+                        </div>
60
+                    </div>
61
+
62
+                    <!-- 问卷组件 -->
63
+                    <question v-if="planDetail.way === 1 && isParentMounted && (planDetail.way === 1 || (planDetail.messageType === 1 && planDetail.messageParameter))" ref="questionRef"
64
+                        :surveyId="planDetail.questionnaire || planDetail.messageParameter" :userId="taskDetail.patientFiles" :taskId="taskDetail.patientTaskId"></question>
65
+                </div>
66
+                <div class="content-submit" v-if="taskDetail.state === 1 && planDetail.way === 1 && planDetail.executionMethod === 1">
67
+                    <el-button @click="handleCreat">创建工单</el-button>
68
+                    <el-button type="primary" @click="submit">提交</el-button>
69
+                </div>
70
+                <div class="content-submit" v-if="taskDetail.state === 3">
71
+                    <el-button type="primary" @click="submit">保存</el-button>
72
+                </div>
73
+            </div>
74
+        </div>
75
+        <el-dialog
76
+            v-model="dialogAddWorkorder"
77
+            :title="modalTitle"
78
+            center
79
+            width="70%"
80
+            :modal="true"
81
+            :show-close="true"
82
+        >
83
+            <page-order :taskId="taskId" :getDefaultInfo="defaultOrderInfo" @refreshOrder="submitRefresh()"></page-order>
84
+        </el-dialog>
85
+    </div>
86
+</template>
87
+<script setup>
88
+import { ref,onMounted,watch, h } from "vue";
89
+import { useRouter } from 'vue-router';
90
+import { ElMessage } from 'element-plus'
91
+import { userDecrypt } from '@/utils/aes'
92
+import { Message, Phone } from '@element-plus/icons-vue'
93
+
94
+import PageOrder from '@/components/page-order';
95
+import question from '@/views/main/questionnaireManagement/fillOut.vue'
96
+
97
+import { getTimeFrame, ArrayToMap } from '@/utils/tools'
98
+import { taskResults, taskStatus } from "@/utils/commonDic.js"
99
+import useSocketStore from '@/store/modules/socket';
100
+import { Send } from '@/utils/telWebsocket';
101
+import useUserStore from '@/store/modules/user'
102
+import { matchTags } from '@/utils/sms'
103
+import useSelectStore from '@/store/commonSelect/common';
104
+
105
+import { getPlanInfo } from '@/api/patient/plan';
106
+import { getTaskInfo, submitTaskResult } from '@/api/patient/task';
107
+import { smsDetail } from '@/api/system/sms'
108
+import { getPhoneFix } from '@/api/main/main';
109
+
110
+const router = useRouter();
111
+let planDetail = ref({});
112
+let taskDetail = ref({});
113
+const isParentMounted = ref(false);
114
+const questionRef = ref();
115
+const { proxy } = getCurrentInstance();
116
+const callId = ref('');
117
+const lineState = ref('');
118
+const resultLabels = ref([]);
119
+const defaultOrderInfo = ref({
120
+    caller: '',
121
+    callnum: '',
122
+
123
+});
124
+
125
+const msgContent = ref();
126
+
127
+const form = ref({
128
+    state: '',
129
+    desc: '',
130
+    resultLabel: '',
131
+})
132
+
133
+const props = defineProps({
134
+    planId: {
135
+        type: Number,
136
+        default: 0
137
+    },
138
+    taskId: {
139
+        type: Number,
140
+        default: 0
141
+    },
142
+});
143
+watch(props, (nweProps) => {
144
+    console.log('watch props', nweProps);
145
+    initMethod(props)
146
+});
147
+
148
+const emit = defineEmits([
149
+    'submit'
150
+])
151
+const dialogAddWorkorder = ref(false)
152
+const modalTitle = ref('添加工单')
153
+function submitRefresh() {
154
+    ElMessage({
155
+        message: '创建成功',
156
+        type: 'success',
157
+    })
158
+    dialogAddWorkorder.value = false
159
+}
160
+function handleCreat() {
161
+    defaultOrderInfo.value.caller = taskDetail.value.name;
162
+    defaultOrderInfo.value.callnum = userDecrypt(taskDetail.value.mobile);
163
+    console.log(defaultOrderInfo.value, 'defaultOrderInfo.value')
164
+    dialogAddWorkorder.value = true
165
+}
166
+
167
+const smsTempDetail = ref({})
168
+
169
+onMounted(() => {
170
+    resultLabels.value = useSelectStore().resultLabels;
171
+    initMethod(props)
172
+});
173
+
174
+const clickTag = () => {
175
+    console.log('处理厂k');
176
+}
177
+
178
+
179
+async function initMethod(props) {
180
+    callId.value = '';
181
+
182
+    const promiseAll = []
183
+    const types = [];
184
+    if (props.planId) {
185
+        types.push('plan');
186
+        promiseAll.push(getPlanInfo(props.planId));
187
+    }
188
+    if (props.taskId) {
189
+        types.push('task');
190
+        promiseAll.push(getTaskInfo(props.taskId));
191
+    }
192
+
193
+    const result = await Promise.all(promiseAll);
194
+
195
+    for (let index = 0; index < types.length; index++) {
196
+        const type = types[index];
197
+        const res = result[index];
198
+        if (res && res.state === 'success') {
199
+            if (type === 'plan') {
200
+                planDetail.value = res.data || {}
201
+            }
202
+            if (type === 'task') {
203
+                taskDetail.value = res.data || {}
204
+
205
+                if (taskDetail.value.callState && taskDetail.value.state > 1) {
206
+                    form.value.state = taskDetail.value.callState;
207
+                    form.value.desc = taskDetail.value.sfResult;
208
+                    form.value.resultLabel = taskDetail.value.labelValue;
209
+                } else {
210
+                    form.value.desc = '';
211
+                    const initStatus = taskResults.find((o) => { return !!o.checked });
212
+                    if (initStatus) form.value.state = initStatus.value
213
+                }
214
+                taskDetail.value.seatName = res.data.seatName ? res.data.seatName : useUserStore().name
215
+                isParentMounted.value = true;
216
+            }
217
+        }
218
+    }
219
+
220
+    if (planDetail.value.message && planDetail.value.way === 2) {
221
+        smsDetail(planDetail.value.message).then((smsRes) => {
222
+            if (smsRes && smsRes.state === 'success') {
223
+                smsTempDetail.value = smsRes.data
224
+
225
+                let urlLabel = '';
226
+                if (planDetail.value.messageType === 2) urlLabel = planDetail.value.messageParameter;
227
+                if (planDetail.value.messageType === 1) {
228
+                    urlLabel = '问卷'
229
+                }
230
+                msgContent.value = matchTags(smsRes.data.content, {
231
+                    userName: {
232
+                        label: taskDetail.value.name,
233
+                    },
234
+                    seatUser: {
235
+                        label: taskDetail.value.seatName,
236
+                        // click: () => {
237
+                        //     console.log(111);
238
+                        // }
239
+                    },
240
+                    url: {
241
+                        label: urlLabel,
242
+                    },
243
+                });
244
+
245
+            }
246
+        })
247
+    }
248
+}
249
+
250
+const taskStatusMap = ArrayToMap(taskStatus, 'value');
251
+
252
+// 提交结果
253
+const submit = () => {
254
+    console.log(lineState.value)
255
+    if (!(lineState.value === '' || lineState.value === '在线')) return proxy.$modal.msgError('请等待用户挂断');
256
+    let params = {}
257
+    if (planDetail.value.way === 1 &&  form.value.state === '正常接听') {
258
+    // if (planDetail.value.way === 1) {
259
+        params = questionRef.value.getParams();
260
+    }
261
+    console.log(params, 'params');
262
+    
263
+    if (!params &&  form.value.state === '正常接听') return;
264
+    // if (!params) return;
265
+    params.entername = taskDetail.value.name;
266
+    params.answeruser = taskDetail.value.patientFiles;
267
+    params.enterphone = taskDetail.value.mobile;
268
+
269
+    
270
+
271
+    // 更新state
272
+    const stateInfo = taskResults.find((o) => {
273
+        return o.value === form.value.state
274
+    });
275
+
276
+    let resultParams = {
277
+        patientTaskId: taskDetail.value.patientTaskId,
278
+        callState: form.value.state,
279
+        sfResult: form.value.desc,
280
+        labelValue: form.value.resultLabel || '',
281
+    };
282
+    if (callId.value) resultParams.callRecords = callId.value;
283
+    if (stateInfo) {
284
+        if (stateInfo.error) {
285
+            resultParams.state = 4;
286
+        } else if (stateInfo.end) {
287
+            resultParams.state = 3;
288
+        }
289
+    }
290
+    
291
+    // if (stateInfo && stateInfo.end) resultParams.state = 3;
292
+    // if (form.value.state === '无人接听') {
293
+    //     resultParams.state = 1
294
+    // }
295
+
296
+
297
+    console.log(resultParams)
298
+    console.log(params)
299
+    // return
300
+    //TODO: 增加判断,电话类型的如果接通,必须挂点电话之后才可以提交
301
+    submitTaskResult({  
302
+        ...resultParams,
303
+        answer: params,
304
+        planId: planDetail.value.plId,
305
+    }).then((res) => {
306
+        if (res.state === 'success') {
307
+            ElMessage({
308
+                message: '操作成功',
309
+                type: 'success',
310
+            })
311
+
312
+            // 告诉父级组件完成了
313
+            emit('submit')
314
+        } else {
315
+            // 失败
316
+            ElMessage({
317
+                message: '操作失败',
318
+                type: 'error',
319
+            })
320
+        }
321
+    })
322
+}
323
+
324
+// 发送短信
325
+const sendMessage = () => {
326
+    //TODO: 组装短信,并发送短信
327
+   
328
+    // 点击发送成功之后,需要更改状态
329
+}
330
+const scoketDatas = ref({});
331
+const stateObj = {
332
+  0:'离线',
333
+  1:'登录中',
334
+  2:'在线',
335
+  3:'通话中',
336
+  4:'话后处理中',
337
+  5:'离线',
338
+  6:'振铃',
339
+  7:'注销',
340
+}
341
+// 外呼
342
+const callPhone = () => {
343
+    lineState.value = '发起外呼';
344
+    // 获取解密后的手机号
345
+    
346
+    const phone = userDecrypt(taskDetail.value.mobile);
347
+    // const phone = '15838094023'
348
+    //TODO: 增加外呼逻辑
349
+    if (!useSocketStore().accountNumber) {
350
+        proxy.$modal.msgSuccess('还没有签入');
351
+        lineState.value = '';
352
+        return
353
+    }
354
+    getPhoneFix(phone).then((data) => {
355
+        if (data.state === 'success') {
356
+            scoketDatas.value = {
357
+                AgentID: useSocketStore().accountNumber,
358
+                AgentExten: useSocketStore().extensionNumber,
359
+                Type: 'MakeCall',
360
+                DestinationNumber: data.data[0],
361
+            };
362
+            console.log(scoketDatas.value);
363
+            Send(scoketDatas.value, (data) => {
364
+                console.log(data, 'data'); //{CallID: 'c6207188-1361-11ef-8802-2b593e364a61', RecPath: '/home/wav/luyin/20240516/1009/165344_c6207188136111ef88022b593e364a61.wav', Result: true, Type: 'RecordPath'}
365
+                if (data.Type === 'MakeCall') {
366
+                    console.log('外呼');
367
+                   
368
+                    if (data.Result == true) {
369
+                        proxy.$modal.msgSuccess('外呼成功');
370
+                    } else {
371
+                        proxy.$modal.msgError('外呼失败');
372
+                    }
373
+                }
374
+
375
+                if (data.Type === 'CallID') {
376
+                    callId.value = data.CallID;
377
+                }
378
+
379
+                if (data.Type === 'State') {
380
+                    lineState.value = stateObj[data.State];
381
+                }
382
+                console.log(lineState.value)
383
+            });
384
+        } else {
385
+            lineState.value = '';
386
+        }
387
+    }).catch(() => {
388
+        proxy.$modal.msgError('外呼失败');
389
+        lineState.value = '';
390
+    });
391
+
392
+    
393
+}
394
+
395
+</script>
396
+<style scoped lang="scss">
397
+.wrap {
398
+    .descripEle {
399
+        .title {
400
+            position: relative;
401
+            display: flex;
402
+
403
+            .title-text {
404
+                font-size: 18px;
405
+                font-weight: bold;
406
+                line-height: 36px;
407
+                margin-right: 30px;
408
+            }
409
+
410
+            .title-btn {
411
+                margin-top: 7px;
412
+                display: inline-block;
413
+            }
414
+
415
+            .btn-call {
416
+                position: absolute;
417
+                right: 15px;
418
+                top: 3px;
419
+            }
420
+        }
421
+
422
+        .content {
423
+            font-size: 14px;
424
+            color: #606266;
425
+
426
+            .content-info {
427
+                line-height: 28px;
428
+            }
429
+
430
+            .content-item {
431
+                display: flex;
432
+                margin-bottom: 15px;
433
+
434
+                .item1 {
435
+                    margin-right: 30px;
436
+                }
437
+            }
438
+
439
+            .content-submit {
440
+                margin: 0 auto;
441
+                text-align: center;
442
+                position: absolute;
443
+                bottom: 12px;
444
+                width: 45%;
445
+            }
446
+
447
+        }
448
+
449
+    }
450
+}
451
+</style>

+ 13 - 2
src/views/main/followUp/followUpTask/followUpTask.vue

@@ -174,10 +174,20 @@
174 174
             <div>随访人员</div>
175 175
             <div>{{ item.seatName ? item.seatName : '-' }}</div>
176 176
           </td>
177
-          <td class="list-item">
177
+          <!-- <td class="list-item">
178
+            <div class="item-dot" :style="[{ 'background': taskResultsMap[item.callState || ''].color }]"></div>
179
+            <div class="item-state">{{ taskResultsMap[item.callState || ''].title }}</div>
180
+          </td> -->
181
+
182
+          <td class="list-item" v-if="item.way === 1">
178 183
             <div class="item-dot" :style="[{ 'background': taskResultsMap[item.callState || ''].color }]"></div>
179 184
             <div class="item-state">{{ taskResultsMap[item.callState || ''].title }}</div>
180 185
           </td>
186
+
187
+          <td class="list-item" v-if="item.way === 2 && item.state">
188
+            <div class="item-dot" :style="[{ 'background': taskMsgResults[item.state].color }]"></div>
189
+            <div class="item-state">{{ taskMsgResults[item.state].title }}</div>
190
+          </td>
181 191
           <td class="list-item">
182 192
             
183 193
             <el-button type="primary" link @click="handleDetail(item)" v-if="item.state === 1">随访</el-button>
@@ -225,7 +235,8 @@ import { Search } from '@element-plus/icons-vue'
225 235
 import { useRouter } from 'vue-router';
226 236
 import { getTasks, getSelfTaskReport } from  '@/api/patient/task'
227 237
 import { getPlans } from  '@/api/patient/plan'
228
-import { taskResults } from "@/utils/commonDic.js"
238
+import { taskResults,taskMsgResults } from "@/utils/commonDic.js";
239
+
229 240
 import { ArrayToMap } from '@/utils/tools'
230 241
 import { getZhuanguiStatus } from '@/utils/index'
231 242
 import { getPageListData, editPageData } from '@/api/main/system/system';

+ 71 - 58
src/views/main/questionnaireManagement/fillOut.vue

@@ -33,7 +33,6 @@
33 33
 								<el-radio v-for="(val, ind) in v.optionViewList" :key="ind"
34 34
 									:label="val.optionname +':'+val.optiondetail"  :value="val.optionname"/>
35 35
 							</el-radio-group>
36
-							<el-input v-model="v['reason']" v-if="v.optionViewList.find((o) => { return o.remark === 'true' && o.optionname === v['_content'] })" type="textarea" placeholder="请输入"></el-input>
37 36
 						</div>
38 37
 					</div>
39 38
 
@@ -151,8 +150,14 @@
151 150
 		</el-dialog>
152 151
 	</div>
153 152
 </template>
153
+<script>
154 154
 
155
-<script setup>
155
+export default {
156
+	name: 'fillOut'
157
+}
158
+</script>
159
+
160
+<script setup name="fillOut">
156 161
 import { ref, reactive, getCurrentInstance, } from 'vue'
157 162
 
158 163
 import { getPageListData, createPageData } from '@/api/main/system/system'
@@ -169,22 +174,23 @@ const { proxy } = getCurrentInstance();
169 174
 const props = defineProps({
170 175
 	surveyId: {
171 176
 		type: Number,
172
-		default: 0
177
+		default:0
173 178
 	},
174 179
 	userId: {
175 180
 		type: String,
176
-		default:''
181
+		default: '-1'
177 182
 	},
178
-	answersheetId: {
183
+	sheetId: {
179 184
 		type: Number,
180
-		default: 0
185
+		default:0
181 186
 	},
182 187
 	taskId: {
183 188
 		type: Number,
184 189
 		default: 0
185
-	},
190
+	}
186 191
 });
187 192
 watch(props, (nweProps) => {
193
+	console.log('fillOut', props, nweProps);
188 194
 	getData()
189 195
 });
190 196
 /** -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- */
@@ -241,20 +247,22 @@ const buttDis = ref(true);
241 247
 
242 248
 // 获取初始化数据
243 249
 const getData = () => {
244
-	console.log(query.user, props.userId, 'query.user');
245
-	if ((query.user && query.user !== '-1') || props.userId || (props.answersheetId || query.answersheetid) || (props.taskId || query.taskId)) {
246
-		let url = `/survey/survey/getdetail?id=${props.surveyId || query.id}`;
247
-		if (props.userId || query.user) {
248
-			url += `&user=${props.userId || query.user}`;
249
-		}
250
-		if (props.answersheetId || query.answersheetid) {
251
-			url += `&answersheetid=${props.answersheetId || query.answersheetid}`;
252
-		}
253
-		if (props.taskId || query.taskId) {
254
-		    url += `&taskid=${props.taskId || query.taskId}`;
250
+	console.log(props.userId, props.surveyId, 'getData---');
251
+	if ((query.user && query.user !== '-1') || props.userId || (props.sheetId || query.sheetId) || (props.taskId || query.taskId)) {
252
+		console.log(props.surveyId, 'asdfasdf')
253
+		const params ={
254
+			id: props.surveyId || query.id,
255
+			user: props.userId || query.user,
256
+			sheetid: props.sheetId || query.sheetId,
257
+			taskid: props.taskId || query.taskId,
255 258
 		}
259
+
260
+		if (params.sheetid) delete params.user;
261
+
262
+		console.log(params, 'params--params');
263
+		if (!params.id) return;
256 264
 		
257
-		getPageListData(url).then(({ data }) => {
265
+		getPageListData(`/survey/survey/getdetail`,params).then(({ data }) => {
258 266
 
259 267
 			for (const val of data.questionlist) {
260 268
 				if (val.type === '单选' || val.type === '问答') {
@@ -273,12 +281,12 @@ const getData = () => {
273 281
 			rqDis.value = true;
274 282
 		})
275 283
 	} else {
276
-
284
+		console.log('getData');
277 285
 		setTimeout(() => {
278 286
 			Fingerprint2.get(async (components) => {
279 287
 				const values = components.map(component => component.value);
280 288
 				const murmur = Fingerprint2.x64hash128(values.join(''), 31);
281
-				
289
+
282 290
 				// 获取微信头像与昵称 
283 291
 				if (query.code) {
284 292
 					await getPageListData('/wechat/getopenid', {
@@ -291,7 +299,6 @@ const getData = () => {
291 299
 
292 300
 				// 唯一ID
293 301
 				let storId = localStorage.getItem('storId');
294
-				console.log(storId, 'storId');
295 302
 				if (storId) {
296 303
 					pageId.value = storId;
297 304
 				} else {
@@ -307,6 +314,10 @@ const getData = () => {
307 314
 					pageId.value = localStorage.getItem('storId')
308 315
 				}
309 316
 
317
+				// const params ={
318
+				// 	id:props.surveyId || query.id,
319
+				// 	user:props.userId || query.user,
320
+				// }
310 321
 				getPageListData(`/survey/survey/getdetail?id=${query.id}&user=${pageId.value}`).then(({ data }) => {
311 322
 					if (data.existanswer === 1) {
312 323
 						for (const val of data.questionlist) {
@@ -323,14 +334,12 @@ const getData = () => {
323 334
 					}
324 335
 
325 336
 					formData.value = data;
326
-					console.log(isEnd(formData.value), 'isEnd(formData.value)');
337
+
327 338
 					// 不是进行中的问卷 全部隐藏
328 339
 					if (isEnd(formData.value) !== '进行中' && query.user !== '-1') {
329 340
 						return;
330 341
 					}
331 342
 
332
-					
333
-					
334 343
 					// 判断 只能微信填写 没有进行微信授权 该用户没有填写
335 344
 					if (formData.value.setting === 1 && query.code === undefined && formData.value.existanswer !== 1) {
336 345
 						const appid = 'wxe8b06998505853d2';
@@ -396,11 +405,12 @@ const getParams = () => {
396 405
 			// 		"surveyid": 0
397 406
 			// 	}
398 407
 		],
399
-		answeruser: pageId.value, // 唯一标识  
408
+		answeruser: pageId.value || query.patientId, // 唯一标识  
400 409
 		surveyid: formData.value['surveyId'], // 问卷id 
401
-
410
+		taskId:(props.taskId || query.taskId), // 任务id
402 411
 		imgurl: wxData.value['imgUrl'],
403 412
 		nickname: wxData.value['nickName'],
413
+		isSms: query.isSms || '', // 是否短信
404 414
 	}
405 415
 
406 416
 	// 校验
@@ -430,12 +440,11 @@ const getParams = () => {
430 440
 		// 获取数据
431 441
 		if (v.type === '问答') {
432 442
 			params.answerlist.push({
433
-				answeruser: props.userId || pageId.value,
443
+				answeruser: query.patientId || props.userId || pageId.value,
434 444
 				answer: v._content,
435 445
 				optionid: 0,
436 446
 				questionid: v.questionId,
437
-				surveyid: v.surveyid,
438
-				
447
+				surveyid: v.surveyid
439 448
 			})
440 449
 		} else if (v.type === '排序') {
441 450
 			if (!Array.isArray(v._content)) {
@@ -444,7 +453,7 @@ const getParams = () => {
444 453
 
445 454
 			if (v._content) {
446 455
 				params.answerlist.push({
447
-					answeruser: props.userId || pageId.value,
456
+					answeruser: query.patientId || props.userId || pageId.value,
448 457
 					answer: v._content?.join(),
449 458
 					optionid: 0,
450 459
 					questionid: v.questionId,
@@ -463,19 +472,18 @@ const getParams = () => {
463 472
 				}
464 473
 			})) {
465 474
 				params.answerlist.push({
466
-					answeruser: props.userId || pageId.value,
475
+					answeruser: query.patientId || props.userId || pageId.value,
467 476
 					answer: optionname,
468 477
 					optionid: optionId,
469 478
 					questionid: v.questionId,
470
-					surveyid: v.surveyid,
471
-					reason: v.reason || '',
479
+					surveyid: v.surveyid
472 480
 				})
473 481
 			}
474 482
 
475 483
 
476 484
 		}
477 485
 	}
478
-
486
+	console.log(params, 'params');
479 487
 	return params;
480 488
 }
481 489
 
@@ -492,7 +500,8 @@ function sub(type) {
492 500
 		return;
493 501
 	}
494 502
 
495
-
503
+	console.log(params, 'params');
504
+	
496 505
 	if ((formData.value.entername || formData.value.enterphone) && type) {
497 506
 		formRef.value.validate().then(() => {
498 507
 			createPageData('/survey/answersheet', params).then(data => {
@@ -522,28 +531,21 @@ function clear() {
522 531
 // 判断状态
523 532
 function isEnd(data) {
524 533
 	let oldTime = new Date(data.starttime).getTime();
525
-		let newTime = new Date(data.endtime).getTime();
526
-		let time = new Date().getTime();
527
-		
534
+	let newTime = new Date(data.endtime).getTime();
535
+	let time = new Date().getTime();
528 536
 
529 537
 
530
-		if (data.active === 0) {
531
-			return '停用';
532
-		} 
533
-		if (!data.active) {
534
-			return '未发布';
535
-		}
536
-		if (data.active === 2) {
537
-			return '进行中';
538
-		}
538
+	if (!data.endtime || !data.starttime) {
539
+		return '未发布';
540
+	}
539 541
 
540
-		if (time < oldTime) {
541
-			return '未开始';
542
-		} else if (time > newTime) {
543
-			return '已结束';
544
-		} else if (time > oldTime && time < newTime) {
545
-			return '进行中';
546
-		}
542
+	if (time < oldTime) {
543
+		return '未开始';
544
+	} else if (time > newTime) {
545
+		return '已结束';
546
+	} else if (time > oldTime && time < newTime) {
547
+		return '进行中';
548
+	}
547 549
 }
548 550
 
549 551
 // 获取域名
@@ -552,6 +554,7 @@ function getoRigin() {
552 554
 }
553 555
 
554 556
 onMounted(() => {
557
+	console.log('fill-onMounted');
555 558
 	getData()
556 559
 });
557 560
 
@@ -582,7 +585,19 @@ defineExpose({
582 585
 	overflow: auto;
583 586
 }
584 587
 
585
-@media screen and (min-width : 800px) {
588
+/* 单选按钮标签换行 */
589
+:deep(.el-radio__label) {
590
+  white-space: normal !important;
591
+  word-break: break-word !important;
592
+}
593
+
594
+/* 多选框标签换行 */
595
+:deep(.el-checkbox__label) {
596
+  white-space: normal !important;
597
+  word-break: break-word !important;
598
+}
599
+
600
+@media screen and (min-width : 500px) {
586 601
 	.rqCss {
587 602
 		height: 100%;
588 603
 		background: rgb(245, 246, 250)
@@ -628,14 +643,12 @@ defineExpose({
628 643
 				text-align: left;
629 644
 				font-size: 15px;
630 645
 				color: rgb(102, 102, 102);
631
-    			// font-family: fangsong;
632 646
 			}
633 647
 		}
634 648
 
635 649
 		.footer {
636 650
 			font-size: 15px;
637 651
 			color: rgb(102, 102, 102);
638
-    		// font-family: fangsong;
639 652
 		}
640 653
 
641 654
 		.content {

Fichier diff supprimé car celui-ci est trop grand
+ 787 - 0
src/views/main/questionnaireManagement/fillOut2.vue