Browse Source

丰富诊后问卷调查

lighter 1 year ago
parent
commit
684d7df99f

+ 136 - 26
src/views/hospital-service/assessments/ClinicSatisfiedAssessment.vue

@@ -15,7 +15,7 @@
         <van-checkbox-group v-model="answer['item' + (item.key + 1) + 'Arr']" direction="horizontal">
           <van-checkbox
               shape="square"
-              v-for="child in (item.key === 11 ? checkboxOptions2 : checkboxOptions)"
+              v-for="child in getOptions(item.key)"
               :key="child.key"
               :name="child.key"
               style="margin-top: 5px"
@@ -25,8 +25,56 @@
         <div class="m-input">其他:<input type="text" v-model="answer['item' + (item.key + 1) + 'Input']"></div>
       </div>
     </div>
+
+    <div style="padding: 6px 6px 12px 6px; border-bottom: 1px dashed rgb(128,128,128)">
+      <p>8-1、您选择我院的主要原因是什么?</p>
+      <van-checkbox-group v-model="answer['item1002Arr']" direction="horizontal">
+        <van-checkbox
+            shape="square"
+            v-for="child in checkboxOptions4"
+            :key="child.key"
+            :name="child.key"
+            style="margin-top: 5px"
+        >{{ child.label }}
+        </van-checkbox>
+      </van-checkbox-group>
+      <div class="m-input">其他:<input type="text" v-model="answer['item1002Input']"></div>
+    </div>
+    <div style="padding: 6px 6px 12px 6px; border-bottom: 1px dashed rgb(128,128,128)">
+      <p>9-1、如果您或亲朋好友需要医疗保健、治疗服务时,您会选择再来或推荐来吗?</p>
+      <van-radio-group v-model="answer['item1004']" direction="horizontal">
+        <van-radio
+            shape="square"
+            v-for="child in checkboxOptions5"
+            :name="child.key"
+            style="margin-top: 5px"
+        >{{ child.label }}
+        </van-radio>
+      </van-radio-group>
+    </div>
+
+    <div style="padding: 6px 6px 12px 6px; border-bottom: 1px dashed rgb(128,128,128)">
+      <p>10-1、请您对本次就诊的医疗服务全过程给予整体评价(1-10分)</p>
+      <van-radio-group v-model="answer['item1006']" direction="horizontal">
+        <van-radio
+            shape="square"
+            v-for="n in 10"
+            :name="n"
+            style="margin-top: 5px"
+        >{{ n }}
+        </van-radio>
+      </van-radio-group>
+    </div>
+
+    <div style="padding: 6px 6px 12px 6px; border-bottom: 1px dashed rgb(128,128,128)">
+      <p>您最满意的医生、护士是:</p>
+      <div class="m-input">
+        <input type="text" v-model="answer.satisfyStaff">
+      </div>
+    </div>
+
     <div class="m-input" style="padding: 0 6px; margin-bottom: 20px">
-      您对医院还有什么建议与意见吗?
+      您对我院的建议和意见:
       <input type="text" v-model="answer.suggestion" style="width: 100%">
     </div>
     <van-button type="primary" block :disabled="disableSubmitButton" @click="submitAnswer">提交</van-button>
@@ -44,23 +92,23 @@ const answer = reactive({
 })
 const disableSubmitButton = ref(false)
 const headQuestions = [
-  {key: 1, label: '1-1、您对药剂科工作人员服务满意吗?'},
-  {key: 3, label: '2-1、您对放射科工作人员服务满意吗?'},
-  {key: 5, label: '3-1、您对超声影像科工作人员服务满意吗?'},
-  {key: 7, label: '4-1、您对检验科工作人员服务满意吗?'},
-  {key: 9, label: '5-1、您对收费窗口工作人员服务满意吗?'},
-  {key: 11, label: '6-1、您对门诊医护人员服务满意吗?'}, // checkboxOptions2
-  {key: 13, label: '7-1、您对急诊医护人员服务满意吗?'},
+  {key: 11, label: '1-1、您对门急诊导诊及护理人员服务满意吗?'}, // checkboxOptions3
+  {key: 13, label: '2-1、您对门急诊医生服务满意吗?'},
+  {key: 1, label: '3-1、您对药剂科工作人员服务满意吗?'},
+  {key: 3, label: '4-1、您对放射科工作人员服务满意吗?'},
+  {key: 5, label: '5-1、您对超声影像科工作人员服务满意吗?'},
+  {key: 7, label: '6-1、您对检验科工作人员服务满意吗?'},
+  {key: 9, label: '7-1、您对收费窗口工作人员服务满意吗?'},
 ]
 
 const tailQuestions = [
-  {key: 2, label: '1-2、您对药剂科工作人员哪些服务不满意?'},
-  {key: 4, label: '2-2、您对放射科工作人员哪些服务不满意?'},
-  {key: 6, label: '3-2、您对超声影像科工作人员哪些服务不满意?'},
-  {key: 8, label: '4-2、您对检验科工作人员哪些服务不满意?'},
-  {key: 10, label: '5-2、您对收费窗口工作人员哪些服务不满意?'},
-  {key: 12, label: '6-2、您对门诊医护人员哪些服务不满意?'}, // checkboxOptions2
-  {key: 14, label: '7-2、您对急诊医护人员哪些服务不满意?'},
+  {key: 12, label: '1-2、您对门急诊导诊及护理人员哪些服务不满意?'}, // checkboxOptions3
+  {key: 14, label: '2-2、您对门急诊医生哪些服务不满意?'},
+  {key: 2, label: '3-2、您对药剂科工作人员哪些服务不满意?'},
+  {key: 4, label: '4-2、您对放射科工作人员哪些服务不满意?'},
+  {key: 6, label: '5-2、您对超声影像科工作人员哪些服务不满意?'},
+  {key: 8, label: '6-2、您对检验科工作人员哪些服务不满意?'},
+  {key: 10, label: '7-2、您对收费窗口工作人员哪些服务不满意?'},
 ]
 
 const checkboxOptions = [
@@ -82,11 +130,44 @@ const checkboxOptions2 = [
   {key: 'F', label: '服装礼仪'},
 ]
 
+const checkboxOptions3 = [
+  {key: 'A', label: '技术水平'},
+  {key: 'B', label: '隐私保护'},
+  {key: 'C', label: '服务态度'},
+  {key: 'D', label: '沟通解释'},
+  {key: 'E', label: '病情巡视'},
+  {key: 'F', label: '服装礼仪'},
+]
+
+const checkboxOptions4 = [
+  {key: 'A', label: '慕名而来'},
+  {key: 'B', label: '就近选择'},
+  {key: 'C', label: '朋友推荐'},
+  {key: 'D', label: '网络查询'},
+  {key: 'E', label: '服务水平'},
+  {key: 'F', label: '环境设备'},
+  {key: 'G', label: '医疗价格'},
+]
+
+const checkboxOptions5 = [
+  {key: 'A', label: '会'},
+  {key: 'B', label: '不会'},
+  {key: 'C', label: '不一定'},
+]
+
+function getOptions(key) {
+  if (key === 11) {
+    return checkboxOptions3
+  } else if (key === 13) {
+    return checkboxOptions2;
+  } else {
+    return checkboxOptions
+  }
+}
+
 const submitAnswer = () => {
-  for (let i = 0; i < keyList.length; i++) {
-    if (!validAnswer(i)) {
-      return
-    }
+  if (!validAnswer()) {
+    return
   }
   submitClinicSatisfiedAssessment(answer).then(() => {
     disableSubmitButton.value = true
@@ -101,19 +182,48 @@ const submitAnswer = () => {
 }
 
 const keyList = [
+  {key1: 'item11', key2: 'item12Arr', key3: 'item12Input'},
+  {key1: 'item13', key2: 'item14Arr', key3: 'item14Input'},
   {key1: 'item1', key2: 'item2Arr', key3: 'item2Input'},
   {key1: 'item3', key2: 'item4Arr', key3: 'item4Input'},
   {key1: 'item5', key2: 'item6Arr', key3: 'item6Input'},
   {key1: 'item7', key2: 'item8Arr', key3: 'item8Input'},
   {key1: 'item9', key2: 'item10Arr', key3: 'item10Input'},
-  {key1: 'item11', key2: 'item12Arr', key3: 'item12Input'},
-  {key1: 'item13', key2: 'item14Arr', key3: 'item14Input'}
 ]
-const validAnswer = (index) => {
-  let keyObj = keyList[index]
-  if (answer[keyObj.key1] === 'B' && !answer[keyObj.key2] && !answer[keyObj.key3]) {
+const validAnswer = () => {
+  for (let i = 0; i < keyList.length; i++) {
+    let keyObj = keyList[i]
+    if (answer[keyObj.key1] === 'B'
+        && (!answer[keyObj.key2] || answer[keyObj.key2].length === 0)
+        && !answer[keyObj.key3]) {
+      showToast({
+        message: `请补充或者勾选【${i + 1}-2】中您不满意的原因。`,
+        position: 'top',
+        duration: 3000,
+      })
+      return false
+    }
+  }
+  if ((!answer['item1002Arr'] || answer['item1002Arr'].length === 0)
+      && !answer['item1002Input']) {
+    showToast({
+      message: `请补充或者勾选【8-1】中的选项。`,
+      position: 'top',
+      duration: 3000,
+    })
+    return false
+  }
+  if (!answer['item1004']) {
+    showToast({
+      message: `请勾选【9-1】中的选项。`,
+      position: 'top',
+      duration: 3000,
+    })
+    return false
+  }
+  if (!answer['item1006']) {
     showToast({
-      message: `请补充或者勾选【${index + 1}-2】中您不满意的原因。`,
+      message: `请勾选【10-1】中的选项。`,
       position: 'top',
       duration: 3000,
     })

+ 101 - 9
src/views/hospital-service/assessments/InpatientSatisfiedAssessment.vue

@@ -112,8 +112,56 @@
         </van-checkbox-group>
       </div>
     </div>
+
+    <div style="padding: 6px 6px 12px 6px; border-bottom: 1px dashed rgb(128,128,128)">
+      <p>12-1、您选择我院的主要原因是什么?</p>
+      <van-checkbox-group v-model="answer['item1002Arr']" direction="horizontal">
+        <van-checkbox
+            shape="square"
+            v-for="child in checkboxOptions5"
+            :key="child.key"
+            :name="child.key"
+            style="margin-top: 5px"
+        >{{ child.label }}
+        </van-checkbox>
+      </van-checkbox-group>
+      <div class="m-input">其他:<input type="text" v-model="answer['item1002Input']"></div>
+    </div>
+    <div style="padding: 6px 6px 12px 6px; border-bottom: 1px dashed rgb(128,128,128)">
+      <p>13-1、如果您或亲朋好友需要医疗保健、治疗服务时,您会选择再来或推荐来吗?</p>
+      <van-radio-group v-model="answer['item1004']" direction="horizontal">
+        <van-radio
+            shape="square"
+            v-for="child in checkboxOptions6"
+            :name="child.key"
+            style="margin-top: 5px"
+        >{{ child.label }}
+        </van-radio>
+      </van-radio-group>
+    </div>
+
+    <div style="padding: 6px 6px 12px 6px; border-bottom: 1px dashed rgb(128,128,128)">
+      <p>14-1、请您对本次就诊的医疗服务全过程给予整体评价(1-10分)</p>
+      <van-radio-group v-model="answer['item1006']" direction="horizontal">
+        <van-radio
+            shape="square"
+            v-for="n in 10"
+            :name="n"
+            style="margin-top: 5px"
+        >{{ n }}
+        </van-radio>
+      </van-radio-group>
+    </div>
+
+    <div style="padding: 6px 6px 12px 6px; border-bottom: 1px dashed rgb(128,128,128)">
+      <p>您最满意的医生、护士是:</p>
+      <div class="m-input">
+        <input type="text" v-model="answer.satisfyStaff">
+      </div>
+    </div>
+
     <div class="m-input" style="padding: 0 6px; margin-bottom: 20px">
-      您对医院还有什么建议与意见吗?
+      您对我院的建议和意见:
       <input type="text" v-model="answer.suggestion" style="width: 100%">
     </div>
     <van-button type="primary" block :disabled="disableSubmitButton" @click="submitAnswer">提交</van-button>
@@ -172,6 +220,22 @@ const checkboxOptions4 = [
   {key: 'G', label: '其他'},
 ]
 
+const checkboxOptions5 = [
+  {key: 'A', label: '慕名而来'},
+  {key: 'B', label: '就近选择'},
+  {key: 'C', label: '朋友推荐'},
+  {key: 'D', label: '网络查询'},
+  {key: 'E', label: '服务水平'},
+  {key: 'F', label: '环境设备'},
+  {key: 'G', label: '医疗价格'},
+]
+
+const checkboxOptions6 = [
+  {key: 'A', label: '会'},
+  {key: 'B', label: '不会'},
+  {key: 'C', label: '不一定'},
+]
+
 const headQuestions = [
   {key: 9, label: '5-1、您对药剂科工作人员服务满意吗?'},
   {key: 11, label: '6-1、您对放射科工作人员服务满意吗?'},
@@ -203,10 +267,8 @@ const checkboxOptions = [
 ]
 
 const submitAnswer = () => {
-  for (let i = 0; i < keyList.length; i++) {
-    if (!validAnswer(i)) {
-      return
-    }
+  if (!validAnswer()) {
+    return
   }
   submitInpatientSatisfiedAssessment(answer).then(() => {
     disableSubmitButton.value = true
@@ -233,11 +295,41 @@ const keyList = [
   {key1: 'item19', key2: 'item20Arr'},
   {key1: 'item21', key2: 'item22Arr'},
 ]
-const validAnswer = (index) => {
-  let keyObj = keyList[index]
-  if (answer[keyObj.key1] === 'B' && !answer[keyObj.key2]) {
+
+const validAnswer = () => {
+  for (let i = 0; i < keyList.length; i++) {
+    let keyObj = keyList[i]
+    if (answer[keyObj.key1] === 'B'
+        && (!answer[keyObj.key2] || answer[keyObj.key2].length === 0)
+        && !answer[keyObj.key3]) {
+      showToast({
+        message: `请补充或者勾选【${i + 1}-2】中您不满意的原因。`,
+        position: 'top',
+        duration: 3000,
+      })
+      return false
+    }
+  }
+  if ((!answer['item1002Arr'] || answer['item1002Arr'].length === 0)
+      && !answer['item1002Input']) {
+    showToast({
+      message: `请补充或者勾选【12-1】中的选项。`,
+      position: 'top',
+      duration: 3000,
+    })
+    return false
+  }
+  if (!answer['item1004']) {
+    showToast({
+      message: `请勾选【13-1】中的选项。`,
+      position: 'top',
+      duration: 3000,
+    })
+    return false
+  }
+  if (!answer['item1006']) {
     showToast({
-      message: `请勾选【${index + 1}-2】中您不满意的原因。`,
+      message: `请勾选【14-1】中的选项。`,
       position: 'top',
       duration: 3000,
     })