satisfactionQuestions.vue 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383
  1. <template>
  2. <view class="container">
  3. <scroll-view
  4. class="scroll_view"
  5. scroll-y
  6. scroll-with-animation
  7. scroll-anchoring
  8. :scroll-into-view="point"
  9. >
  10. <view class="top_bg_box">
  11. <image mode="widthFix" :src="icon.satisfaction.ques_top_bg"></image>
  12. <view class="ques_introduce displayFlexCol">
  13. <text>{{ quesList.SubjectTitle }}</text>
  14. <text>{{ quesList.Remark }}</text>
  15. </view>
  16. </view>
  17. <view class="main_box">
  18. <view class="mask_form" v-if="complete"></view>
  19. <block v-for="(item, index) in quesList.QuestionList" :key="index">
  20. <view
  21. class="ques_item_box"
  22. :id="'p' + index"
  23. :class="item.QuestType == 'SubTitle' ? 'sub_title' : ''"
  24. >
  25. <view class="ques_title_box">
  26. <text class="mustQuest_tag" v-if="item.MustQuest">*</text>
  27. <text v-if="item.QuestType != 'SubTitle'">{{ item.Sort }}.{{ item.Question }}</text>
  28. <text v-if="item.QuestType == 'SubTitle'">{{ item.Num }}、{{ item.Question }}</text>
  29. </view>
  30. <!-- 填空题 -->
  31. <view
  32. class="ques_options align_items_left displayFlexCol"
  33. v-if="item.QuestType == 'Input'"
  34. >
  35. <text class="input_label">{{ item.Question }}:</text>
  36. <view class="textarea_box">
  37. <textarea
  38. auto-height
  39. :data-index="index"
  40. :placeholder="'最多输入' + item.RuleInfo.MaxLength + '个字'"
  41. :maxlength="item.RuleInfo.MaxLength"
  42. :value="item.AnswerList"
  43. @blur="setVal"
  44. />
  45. </view>
  46. </view>
  47. <!-- 矩阵填空题 -->
  48. <view
  49. class="ques_options align_items_left displayFlexCol"
  50. v-if="item.QuestType == 'MatrixInput'"
  51. >
  52. <block
  53. v-for="(childItem, childIndex) in item.MatrixQuestionList"
  54. :key="`MatrixInput-${index}-${childIndex}`"
  55. >
  56. <view class="matrix_input_box margin_bottom_10 displayFlexRow">
  57. <text>{{ childItem.Question }}:</text>
  58. <view class="textarea_box matrix_textarea_box">
  59. <textarea
  60. auto-height
  61. :data-index="index"
  62. :data-childindex="childIndex"
  63. :placeholder="'最多输入' + childItem.RuleInfo.MaxLength + '个字'"
  64. :maxlength="childItem.RuleInfo.MaxLength"
  65. :value="childItem.AnswerList"
  66. @input="setVal"
  67. />
  68. </view>
  69. </view>
  70. </block>
  71. </view>
  72. <!-- 单选/多选题 -->
  73. <view
  74. class="ques_options displayFlexCol"
  75. v-if="item.QuestType == 'Radio' || item.QuestType == 'Checkbox'"
  76. >
  77. <block
  78. v-for="(childItem, childIndex) in item.QuestionItemList"
  79. :key="`Checkbox-${index}-${childIndex}`"
  80. >
  81. <text
  82. class="choice_item"
  83. :class="fn.answer(item, childItem.ItemId) ? 'active_option' : ''"
  84. :data-index="index"
  85. :data-childindex="childIndex"
  86. @click="choiceOption"
  87. >
  88. {{ childItem.ItemName }}
  89. </text>
  90. </block>
  91. </view>
  92. <!-- 选择题 -->
  93. <view class="ques_options displayFlexCol" v-if="item.QuestType == 'Select'">
  94. <picker
  95. class="picker_box"
  96. range-key="ItemName"
  97. :range="item.QuestionItemList"
  98. :data-index="index"
  99. :value="item.AnswerList"
  100. @change="bindPickerChange"
  101. >
  102. <view class="picker displayFlexRow">
  103. <text>{{ item.QuestionItemList[item.AnswerList].ItemName }}</text>
  104. <image :src="icon.satisfaction.right" mode="" />
  105. </view>
  106. </picker>
  107. </view>
  108. <!-- 矩阵单选题/矩阵多选题/矩阵量表 -->
  109. <view
  110. class="ques_options matrix_border displayFlexCol"
  111. v-if="
  112. item.QuestType == 'MatrixRadio' ||
  113. item.QuestType == 'MatrixCheckbox' ||
  114. item.QuestType == 'MatrixScale'
  115. "
  116. >
  117. <view class="matrix_options matrix_options_title displayFlexRow">
  118. <block
  119. v-for="(childItem, childIndex) in item.MatrixQuestionList[0].QuestionItemList"
  120. :key="`${item.QuestType}0-${index}-${childIndex}`"
  121. >
  122. <text
  123. :style="{
  124. width: fn.getWidth(item.MatrixQuestionList[0].QuestionItemList.length) + '%',
  125. }"
  126. >
  127. {{ childItem.ItemName }}
  128. </text>
  129. </block>
  130. </view>
  131. <block
  132. v-for="(childItem, childIndex) in item.MatrixQuestionList"
  133. :key="`${item.QuestType}-${index}-${childIndex}`"
  134. >
  135. <view class="matrix_icon_box displayFlexCol">
  136. <text
  137. :style="{
  138. width: fn.getWidth(item.MatrixQuestionList[0].QuestionItemList.length) + '%',
  139. }"
  140. >{{ childItem.Question }}</text
  141. >
  142. <view class="matrix_options displayFlexBetween">
  143. <block
  144. v-for="(sunItem, sunIndex) in childItem.QuestionItemList"
  145. :key="`${item.QuestType}-${index}-${childIndex}-${sunIndex}`"
  146. >
  147. <view
  148. class="displayFlexRow"
  149. :data-index="index"
  150. :data-childindex="childIndex"
  151. :data-sunindex="sunIndex"
  152. @click="choiceMatrixOption"
  153. >
  154. <!-- 矩阵单选/矩阵量表 -->
  155. <image
  156. :src="
  157. fn.answer(childItem, sunItem.ItemId)
  158. ? icon.satisfaction.circle_active
  159. : icon.satisfaction.circle
  160. "
  161. mode=""
  162. v-if="item.QuestType == 'MatrixRadio' || item.QuestType == 'MatrixScale'"
  163. />
  164. <!-- 矩阵多选 -->
  165. <image
  166. :src="
  167. fn.answer(childItem, sunItem.ItemId)
  168. ? icon.satisfaction.checkBox_circle_active
  169. : icon.satisfaction.checkBox_circle
  170. "
  171. mode=""
  172. v-if="item.QuestType == 'MatrixCheckbox'"
  173. />
  174. </view>
  175. </block>
  176. </view>
  177. </view>
  178. </block>
  179. </view>
  180. <!-- 上传文件题 -->
  181. <view class="ques_options displayFlexCol" v-if="item.QuestType == 'UploadImage'">
  182. <view class="img_list displayFlexRow">
  183. <image
  184. class="add_img"
  185. mode=""
  186. :src="icon.satisfaction.add"
  187. :data-index="index"
  188. @click="choiceFile"
  189. />
  190. <block
  191. v-for="(imgItem, imgIndex) in item.AnswerList"
  192. :key="`UploadImage-${index}-${imgIndex}`"
  193. >
  194. <view class="add_img">
  195. <image class="item_img" :src="imgItem" mode="" />
  196. <image
  197. class="cha_img"
  198. :src="icon.satisfaction.cha_green"
  199. mode=""
  200. :data-index="index"
  201. :data-imgitem="imgItem"
  202. @click="closeImg"
  203. />
  204. </view>
  205. </block>
  206. </view>
  207. <view class="add_img_tips p_flexStart">
  208. <text>限制:</text>
  209. <text> 仅支持图片上传、</text>
  210. <text>
  211. 大小不超过{{ item.RuleInfo.FileSize }}M数量不超过{{ item.RuleInfo.FileCount }}个
  212. </text>
  213. </view>
  214. </view>
  215. <!-- 量表题 -->
  216. <view class="ques_options displayFlexRow" v-if="item.QuestType == 'Scale'">
  217. <block
  218. v-for="(childItem, childIndex) in item.QuestionItemList"
  219. :key="`Scale-${index}-${childIndex}`"
  220. >
  221. <view
  222. class="options_item_box displayFlexCol"
  223. :data-index="index"
  224. :data-childindex="childIndex"
  225. @click="choiceOption"
  226. >
  227. <text>{{ childItem.ItemName }}</text>
  228. <image
  229. :src="
  230. fn.answer(item, childItem.ItemId)
  231. ? icon.satisfaction.circle_active
  232. : icon.satisfaction.circle
  233. "
  234. mode=""
  235. />
  236. </view>
  237. </block>
  238. </view>
  239. </view>
  240. </block>
  241. </view>
  242. </scroll-view>
  243. <!-- <view class="yjfl" @click="yjfk">
  244. <image :src="icon.satisfaction.yjfk" alt="" style="width: 140rpx; height: 140rpx" />
  245. <view class="title"> 意见反馈 </view>
  246. </view> -->
  247. <view class="footer_box displayFlexRow">
  248. <text :class="complete ? 'backgroundCustom_D9' : ''" @click="submit">提交</text>
  249. </view>
  250. <!-- 是否实名弹窗 -->
  251. <view class="modal_wrap" v-if="showModal_Anonymous">
  252. <view class="modal_box">
  253. <view class="modal_tit">是否实名填写</view>
  254. <view class="modal_con">
  255. <view class="modal_box_b1" @click="isAnonymous(1)">实名填写</view>
  256. <view class="modal_box_b1" @click="isAnonymous(2)">匿名填写</view>
  257. </view>
  258. </view>
  259. </view>
  260. <!-- 是否实名弹窗 -->
  261. <view class="modal_wrap" v-if="showModal_User">
  262. <view class="modal_box">
  263. <view class="modal_tit">请选择答卷人</view>
  264. <view class="modal_con">
  265. <view class="modal_user_item" v-if="currentUser.memberName" @click="goSelMember">
  266. <view>
  267. <view>
  268. <text class="modal_t1">{{ currentUser.memberName }}</text>
  269. <text class="modal_t2">
  270. {{ currentUser.sex == 1 ? '男' : currentUser.sex == 2 ? '女' : '未知' }} |
  271. {{ currentUser.age }}岁
  272. </text>
  273. </view>
  274. <view class="modal_t3">{{ currentUser.mobile }}</view>
  275. </view>
  276. <image class="modal_user_right_img" :src="icon.satisfaction.right"></image>
  277. </view>
  278. <view class="modal_user_item" v-else @click="goSelMember">
  279. <view>点击选择答卷人</view>
  280. <image class="modal_user_right_img" :src="icon.satisfaction.right"></image>
  281. </view>
  282. <view class="modal_btn_wrap displayFlexBetween" v-if="currentUser.memberName">
  283. <view class="modal_btn modal_btn1" @click="goBack">取消</view>
  284. <view class="modal_btn modal_btn2" @click="confirmMember">确定</view>
  285. </view>
  286. </view>
  287. </view>
  288. </view>
  289. </view>
  290. </template>
  291. <script lang="ts" setup>
  292. import { reactive, ref } from 'vue';
  293. import { useOnLoad } from '@/hook';
  294. import { useDomain } from '@kasite/uni-app-base';
  295. import { mapGetters } from '@kasite/uni-app-base/store/hook';
  296. import {
  297. QuerySubjectListToChannelTask_V3,
  298. QuerySubjectInfoById_V3,
  299. UploadZxFile,
  300. CommitAnswer_V3,
  301. QuerySample_V3,
  302. QueryMemberByCard_V3,
  303. } from '../../service';
  304. import icon from '@/utils/icon';
  305. import { common, throttle } from '@/utils';
  306. import fn from './fn';
  307. const app = getApp();
  308. let time = null;
  309. const currentUser = ref({} as any);
  310. const taskId = ref('');
  311. const objType = ref('3'); // 3门诊 4住院
  312. const quesList = ref({} as any);
  313. const imgList = ref([]);
  314. const point = ref('');
  315. const complete = ref(false);
  316. const anonymousType = ref(0);
  317. const showModal_Anonymous = ref(false); // 是否实名填写弹窗显示
  318. const showModal_User = ref(false); // 实名用户选择弹窗显示
  319. let quesAnswers = reactive({
  320. MemberId: '',
  321. TaskId: '-1',
  322. SysAppId: 'visit',
  323. SubjectId: '',
  324. UserAgent: '',
  325. IP: '',
  326. Location: '',
  327. Mobile: '',
  328. UserName: '',
  329. Sex: '',
  330. Age: '',
  331. ThirdPartyId: '',
  332. AnswerUseTime: 0,
  333. PushDept: '',
  334. PushDeptName: '',
  335. BedNo: '',
  336. HospitalNo: '',
  337. CardNo: '',
  338. AnswerList: [],
  339. });
  340. let queryPatient = reactive({
  341. cardNo: '',
  342. cardType: ''
  343. });
  344. const { getCurrentUser } = mapGetters({
  345. getCurrentUser: 'getCurrentUser',
  346. });
  347. const main = async (options) => {
  348. currentUser.value = getCurrentUser();
  349. const params = {
  350. SubjectId: options.subjectId,
  351. TaskId: options.taskId,
  352. };
  353. const resp = await QuerySubjectListToChannelTask_V3(params);
  354. if (!common.isEmpty(resp)) {
  355. objType.value = resp[0].GroupType;
  356. //匿名有3种传参 ""(空) "true" "false" 转换字符串为布尔值
  357. let anonymous =
  358. resp[0].Anonymous === 'false'
  359. ? false
  360. : resp[0].Anonymous === 'true'
  361. ? true
  362. : resp[0].Anonymous || '';
  363. // type 1实名 2:匿名 3自行选择
  364. anonymousType.value = anonymous === '' ? 3 : anonymous === false ? 1 : 2;
  365. showModal_Anonymous.value = anonymous == 3 ? true : false;
  366. taskId.value = options.taskId;
  367. quesAnswers.SubjectId = options.subjectId;
  368. //如果不是执行选择直接调用对应填写按钮
  369. if (anonymous != 3) {
  370. isAnonymous(anonymousType.value);
  371. }
  372. await querySubjectInfoById_V3();
  373. // 查询样本和答案
  374. // await querySample_V3();
  375. // 开始计算答卷时间
  376. getSec();
  377. if(options?.type == "sms_myddc") {
  378. currentUser.value.cardNo = options.cardNo
  379. currentUser.value.cardType = options.cardType
  380. showModal_Anonymous.value = false
  381. showModal_User.value = false
  382. }
  383. } else {
  384. common.showModal('该任务已失效', () => {
  385. common.goToUrl(`/pages/business/tabbar/homePage/homePage`, { skipWay: 'reLaunch' });
  386. });
  387. return;
  388. }
  389. };
  390. /** 实名/匿名 */
  391. const isAnonymous = (type) => {
  392. //实名
  393. if (type == 1) {
  394. showModal_Anonymous.value = false;
  395. showModal_User.value = true;
  396. }
  397. //匿名
  398. else {
  399. // currentUser.value = {};
  400. showModal_Anonymous.value = false;
  401. }
  402. };
  403. /** 问卷详情 */
  404. const querySubjectInfoById_V3 = async () => {
  405. const resp = await QuerySubjectInfoById_V3({
  406. SubjectId: quesAnswers.SubjectId,
  407. });
  408. if (common.isNotEmpty(resp)) {
  409. if (resp[0].Status != 0) {
  410. common.showModal('该问卷已失效', () => {
  411. common.navigateBack(1);
  412. });
  413. return;
  414. }
  415. if (resp[0].State != 1) {
  416. common.showModal('该问卷未发布', () => {
  417. common.navigateBack(1);
  418. });
  419. return;
  420. }
  421. // 提交答案数据模版
  422. quesAnswers.PushDept = resp[0].DeptId;
  423. quesAnswers.PushDeptName = resp[0].PushDeptName;
  424. resp[0].QuestionList.forEach((item, index) => {
  425. item.AnswerList = [];
  426. item.MustQuest = item.MustQuest == 'false' ? false : true;
  427. item.RuleInfo = item.RuleInfo != '' ? JSON.parse(item.RuleInfo) : '';
  428. // 多选框
  429. if (item.QuestType == 'Select') {
  430. item.AnswerList = 0;
  431. }
  432. if (common.isNotEmpty(item.MatrixQuestionList)) {
  433. item.MatrixQuestionList.forEach((childItem) => {
  434. childItem.AnswerList = [];
  435. childItem.RuleInfo = childItem.RuleInfo != '' ? JSON.parse(childItem.RuleInfo) : '';
  436. // 答案列表模版
  437. let answerItem = {
  438. Answer: [],
  439. Blank: index,
  440. QuestId: childItem.QuestId,
  441. QuestType: item.QuestType,
  442. MustQuest: item.MustQuest,
  443. };
  444. quesAnswers.AnswerList.push(answerItem);
  445. if (common.isNotEmpty(childItem.QuestionItemList)) {
  446. childItem.QuestionItemList.forEach((sunItem) => {
  447. sunItem.Check = false;
  448. });
  449. }
  450. });
  451. } else {
  452. // 答案列表模版
  453. let answerItem = {
  454. Answer: [],
  455. Blank: index,
  456. QuestId: item.QuestId,
  457. QuestType: item.QuestType,
  458. MustQuest: item.MustQuest,
  459. };
  460. quesAnswers.AnswerList.push(answerItem);
  461. }
  462. });
  463. resp[0].QuestionList = bySort(resp[0].QuestionList);
  464. quesList.value = resp[0];
  465. }
  466. };
  467. /** 查询样本和答案 */
  468. const querySample_V3 = async () => {
  469. const resp = await QuerySample_V3({
  470. SubjectId: quesAnswers.SubjectId,
  471. IsGetAnswer: true,
  472. ThirdPartyId: currentUser.MemberId,
  473. State: 1
  474. });
  475. if (common.isNotEmpty(resp)) {
  476. quesList.value.QuestionList.forEach((item) => {
  477. resp[0].AnswerList.forEach((childItem) => {
  478. if(item.QuestId == childItem.QuestId) {
  479. if(item.QuestType == "Input") {
  480. item.AnswerList = childItem.Answer
  481. }
  482. if(item.QuestType == "UploadImage") {
  483. item.AnswerList = childItem.Answer.split(",")
  484. }
  485. if(common.isNotEmpty(item.QuestionItemList)) {
  486. if(item.QuestType == "Select"){
  487. item.QuestionItemList.forEach((sunItem,sunIndex) => {
  488. if(sunItem.ItemId == childItem.Answer) {
  489. item.AnswerList = sunIndex
  490. }
  491. })
  492. }else {
  493. item.AnswerList = childItem.Answer.split(",")
  494. }
  495. }
  496. }
  497. if(common.isNotEmpty(item.MatrixQuestionList)) {
  498. item.MatrixQuestionList.forEach((sunItem) => {
  499. if(sunItem.QuestId == childItem.QuestId) {
  500. if(sunItem.QuestType == "MatrixInput") {
  501. sunItem.AnswerList = childItem.Answer
  502. }
  503. if(sunItem.QuestType == "MatrixCheckbox" || sunItem.QuestType == "MatrixRadio" || sunItem.QuestType == "MatrixScale") {
  504. sunItem.AnswerList = childItem.Answer.split(",")
  505. }
  506. }
  507. })
  508. }
  509. })
  510. })
  511. complete.value = true;
  512. }
  513. }
  514. /** 计算答题时间 */
  515. const getSec = () => {
  516. time = setTimeout(() => {
  517. let answerUseTime = quesAnswers.AnswerUseTime;
  518. answerUseTime++;
  519. quesAnswers.AnswerUseTime = answerUseTime;
  520. getSec();
  521. }, 1000);
  522. };
  523. /** 根据子标题排序 */
  524. const bySort = (list: any[]) => {
  525. let find = 0;
  526. let sort = 0;
  527. let item = {} as any;
  528. for (var t = 0; t < list.length; t++) {
  529. item = list[t];
  530. //子标题
  531. if (item.QuestType == 'SubTitle') {
  532. //将子标题底下的题目从1开始排
  533. sort = 0;
  534. //判断是出现的第几个子标题
  535. //num是子标题的排序
  536. item.Num = toChinesNum(find + 1);
  537. find++;
  538. } else {
  539. //sort是子标题底下的排序
  540. item.Sort = sort + 1;
  541. sort++;
  542. }
  543. item.SortNum = t;
  544. if (common.isNotEmpty(item.QuestionItemList)) {
  545. item.QuestionItemList.forEach((childItem, childIndex) => {
  546. childItem.SortNum = childIndex;
  547. if (common.isNotEmpty(childItem.QuestionItem)) {
  548. childItem.QuestionItem.forEach((sunItem, sunIndex) => {
  549. sunItem.SortNum = sunIndex;
  550. });
  551. }
  552. });
  553. }
  554. }
  555. return list;
  556. };
  557. /** 汉字顺序 */
  558. const toChinesNum = (num) => {
  559. var changeNum = ['一', '二', '三', '四', '五', '六', '七', '八', '九', '十'],
  560. newNum = '',
  561. arr = num.toString().split('');
  562. arr[0] = parseInt(arr[0]) - 1;
  563. if (arr[0] == -1 && arr.length == 1) {
  564. return '零';
  565. }
  566. if (arr.length > 1) {
  567. arr[1] = parseInt(arr[1]) - 1;
  568. if (!arr[0]) {
  569. newNum = !arr[0] && arr[1] == -1 ? changeNum[9] : changeNum[9] + changeNum[arr[1]];
  570. } else {
  571. newNum = changeNum[arr[0]] + changeNum[9] + (changeNum[arr[1]] ? changeNum[arr[1]] : '');
  572. }
  573. } else {
  574. newNum = changeNum[arr[0]];
  575. }
  576. return newNum;
  577. };
  578. /** 单选/多选/量表 */
  579. const choiceOption = (e) => {
  580. let index = e.currentTarget.dataset.index;
  581. let childIndex = e.currentTarget.dataset.childindex;
  582. let answerIndex = 0;
  583. let questionList = quesList.value.QuestionList;
  584. let answerList = quesAnswers.AnswerList;
  585. answerList.forEach((itm, ind) => {
  586. if (itm.QuestId == questionList[index].QuestId) {
  587. answerIndex = ind;
  588. }
  589. });
  590. // 单选/量表
  591. if (questionList[index].QuestType == 'Radio' || questionList[index].QuestType == 'Scale') {
  592. if (
  593. questionList[index].AnswerList[0] != questionList[index].QuestionItemList[childIndex].ItemId
  594. ) {
  595. questionList[index].AnswerList = [];
  596. questionList[index].AnswerList.push(questionList[index].QuestionItemList[childIndex].ItemId);
  597. }
  598. answerList[answerIndex].Answer = questionList[index].QuestionItemList[childIndex].ItemId;
  599. }
  600. // 多选
  601. else if (questionList[index].QuestType == 'Checkbox') {
  602. let flag = false;
  603. questionList[index].AnswerList.forEach((item) => {
  604. if (item == questionList[index].QuestionItemList[childIndex].ItemId) {
  605. flag = true;
  606. }
  607. });
  608. if (flag) {
  609. questionList[index].AnswerList = questionList[index].AnswerList.filter((item) => {
  610. return item != questionList[index].QuestionItemList[childIndex].ItemId;
  611. });
  612. answerList[answerIndex].Answer = answerList[answerIndex].Answer.filter((fiItem) => {
  613. return fiItem != questionList[index].QuestionItemList[childIndex].ItemId;
  614. });
  615. } else {
  616. if (questionList[index].RuleInfo.MaxLength < questionList[index].AnswerList.length + 1) {
  617. common.showModal('最多选择' + questionList[index].RuleInfo.MaxLength + '项');
  618. return;
  619. }
  620. questionList[index].AnswerList.push(questionList[index].QuestionItemList[childIndex].ItemId);
  621. answerList[answerIndex].Answer.push(questionList[index].QuestionItemList[childIndex].ItemId);
  622. }
  623. }
  624. quesList.value.QuestionList = questionList;
  625. quesAnswers.AnswerList = answerList;
  626. };
  627. /** 选择题 */
  628. const bindPickerChange = (e) => {
  629. let index = e.currentTarget.dataset.index;
  630. let val = e.detail.value;
  631. let questionList = quesList.value.QuestionList;
  632. let answerList = quesAnswers.AnswerList;
  633. let answerIndex = 0;
  634. answerList.forEach((itm, ind) => {
  635. if (itm.QuestId == questionList[index].QuestId) {
  636. answerIndex = ind;
  637. }
  638. });
  639. questionList[index].AnswerList = val;
  640. answerList[answerIndex].Answer = questionList[index].QuestionItemList[val].ItemId;
  641. quesList.value.QuestionList = questionList;
  642. quesAnswers.AnswerList = answerList;
  643. };
  644. /** 矩阵单选 */
  645. const choiceMatrixOption = (e) => {
  646. let index = e.currentTarget.dataset.index;
  647. let childIndex = e.currentTarget.dataset.childindex;
  648. let sunIndex = e.currentTarget.dataset.sunindex;
  649. let questionList = quesList.value.QuestionList;
  650. let answerList = quesAnswers.AnswerList;
  651. let answerIndex = 0;
  652. answerList.forEach((itm, ind) => {
  653. if (itm.QuestId == questionList[index].MatrixQuestionList[childIndex].QuestId) {
  654. answerIndex = ind;
  655. }
  656. });
  657. // 矩阵单选/矩阵量表
  658. if (
  659. questionList[index].QuestType == 'MatrixRadio' ||
  660. questionList[index].QuestType == 'MatrixScale'
  661. ) {
  662. if (
  663. questionList[index].MatrixQuestionList[childIndex].AnswerList[0] !=
  664. questionList[index].MatrixQuestionList[childIndex].QuestionItemList[sunIndex].ItemId
  665. ) {
  666. questionList[index].MatrixQuestionList[childIndex].AnswerList = [];
  667. questionList[index].MatrixQuestionList[childIndex].AnswerList.push(
  668. questionList[index].MatrixQuestionList[childIndex].QuestionItemList[sunIndex].ItemId
  669. );
  670. }
  671. answerList[answerIndex].Answer =
  672. questionList[index].MatrixQuestionList[childIndex].QuestionItemList[sunIndex].ItemId;
  673. }
  674. // 矩阵多选
  675. else if (questionList[index].QuestType == 'MatrixCheckbox') {
  676. let flag = false;
  677. questionList[index].MatrixQuestionList[childIndex].AnswerList.forEach((item) => {
  678. if (
  679. item == questionList[index].MatrixQuestionList[childIndex].QuestionItemList[sunIndex].ItemId
  680. ) {
  681. flag = true;
  682. }
  683. });
  684. if (flag) {
  685. questionList[index].MatrixQuestionList[childIndex].AnswerList = questionList[
  686. index
  687. ].MatrixQuestionList[childIndex].AnswerList.filter((item) => {
  688. return (
  689. item !=
  690. questionList[index].MatrixQuestionList[childIndex].QuestionItemList[sunIndex].ItemId
  691. );
  692. });
  693. answerList[answerIndex].Answer = answerList[answerIndex].Answer.filter((fiItem) => {
  694. return (
  695. fiItem !=
  696. questionList[index].MatrixQuestionList[childIndex].QuestionItemList[sunIndex].ItemId
  697. );
  698. });
  699. } else {
  700. questionList[index].MatrixQuestionList[childIndex].AnswerList.push(
  701. questionList[index].MatrixQuestionList[childIndex].QuestionItemList[sunIndex].ItemId
  702. );
  703. answerList[answerIndex].Answer.push(
  704. questionList[index].MatrixQuestionList[childIndex].QuestionItemList[sunIndex].ItemId
  705. );
  706. }
  707. }
  708. quesList.value.QuestionList = questionList;
  709. quesAnswers.AnswerList = answerList;
  710. };
  711. /** 选择文件 */
  712. const choiceFile = (e) => {
  713. let index = e.currentTarget.dataset.index;
  714. let questionList = quesList.value.QuestionList;
  715. let answerList = quesAnswers.AnswerList;
  716. let answerIndex = 0;
  717. answerList.forEach((itm, ind) => {
  718. if (itm.QuestId == questionList[index].QuestId) {
  719. answerIndex = ind;
  720. }
  721. });
  722. if (answerList[answerIndex].Answer.length >= questionList[index].RuleInfo.FileCount) {
  723. common.showModal('最多上传' + questionList[index].RuleInfo.FileCount + '张图片');
  724. return;
  725. }
  726. uni.chooseImage({
  727. count: questionList[index].RuleInfo.FileCount,
  728. sourceType: ['album', 'camera'],
  729. sizeType: ['compressed'],
  730. async success(res) {
  731. uni.showLoading({
  732. title: '上传中。。。',
  733. });
  734. for (var i = 0; i < res.tempFiles.length; i++) {
  735. let m = 1024 * 1024;
  736. if (res.tempFiles[i].size < m) {
  737. let imgUrl = (await uploadFile(
  738. res.tempFilePaths[i],
  739. questionList[index].RuleInfo.FileCount,
  740. answerList[answerIndex].Answer
  741. )) as string;
  742. if (common.isNotEmpty(imgUrl)) {
  743. imgUrl =
  744. imgUrl.indexOf('http') > -1 ? imgUrl : `${useDomain()}/${imgUrl.replace(/\\/g, '/')}`;
  745. answerList[answerIndex].Answer.push(imgUrl);
  746. questionList[index].AnswerList = answerList[answerIndex].Answer;
  747. quesList.value.QuestionList = questionList;
  748. quesAnswers.AnswerList = answerList;
  749. if (res.tempFiles.length - 1 == i) {
  750. uni.hideLoading();
  751. }
  752. }
  753. } else {
  754. uni.hideLoading();
  755. common.showModal('文件不得大于' + questionList[index].RuleInfo.FileSize + 'M');
  756. return;
  757. }
  758. }
  759. },
  760. });
  761. };
  762. /** 上传文件 */
  763. const uploadFile = (imgItem, fileCount, imgList) => {
  764. return new Promise((resolve, reject) => {
  765. if (imgList.length >= fileCount) {
  766. uni.hideLoading();
  767. common.showModal('最多上传' + fileCount + '张图片');
  768. return;
  769. }
  770. // 将图片上传至服务器
  771. uni.uploadFile({
  772. url: UploadZxFile,
  773. filePath: imgItem,
  774. name: 'newsFile',
  775. formData: {
  776. user: 'test',
  777. },
  778. header: {
  779. token: uni.getStorageSync('token'),
  780. },
  781. data: {},
  782. success(res) {
  783. const data = JSON.parse(res.data);
  784. if (data.RespCode == '10000') {
  785. resolve(data.url);
  786. } else {
  787. common.showModal(data.msg);
  788. }
  789. }
  790. });
  791. });
  792. };
  793. /** 删除图片 */
  794. const closeImg = (e) => {
  795. let index = e.currentTarget.dataset.index;
  796. let imgItem = e.currentTarget.dataset.imgitem;
  797. let questionList = quesList.value.QuestionList;
  798. let answerList = quesAnswers.AnswerList;
  799. let answerIndex = 0;
  800. answerList.forEach((itm, ind) => {
  801. if (itm.QuestId == questionList[index].QuestId) {
  802. answerIndex = ind;
  803. }
  804. });
  805. answerList[answerIndex].Answer = answerList[answerIndex].Answer.filter((item) => {
  806. return item != imgItem;
  807. });
  808. questionList[index].AnswerList = answerList[answerIndex].Answer;
  809. quesList.value.QuestionList = questionList;
  810. quesAnswers.AnswerList = answerList;
  811. };
  812. /** 获取input值 */
  813. const setVal = (e) => {
  814. let index = e.currentTarget.dataset.index;
  815. let childIndex = e.currentTarget.dataset.childindex;
  816. let questionList = quesList.value.QuestionList;
  817. let answerList = quesAnswers.AnswerList;
  818. let answerIndex = 0;
  819. // 矩阵填空题
  820. if (questionList[index].QuestType == 'MatrixInput') {
  821. if (
  822. questionList[index].MatrixQuestionList[childIndex].AnswerList.length ==
  823. questionList[index].MatrixQuestionList[childIndex].RuleInfo.MaxLength
  824. ) {
  825. common.showToast(
  826. '最多输入' + questionList[index].MatrixQuestionList[childIndex].RuleInfo.MaxLength + '个字'
  827. );
  828. return;
  829. }
  830. answerList.forEach((itm, ind) => {
  831. if (itm.QuestId == questionList[index].MatrixQuestionList[childIndex].QuestId) {
  832. answerIndex = ind;
  833. }
  834. });
  835. questionList[index].MatrixQuestionList[childIndex].AnswerList = e.detail.value;
  836. }
  837. // 填空题
  838. else {
  839. if (questionList[index].RuleInfo.DataType != '无') {
  840. let dataTypeOptions = questionList[index].RuleInfo.DataTypeOptions;
  841. for (var i = 0; i < dataTypeOptions.length; i++) {
  842. if (questionList[index].RuleInfo.DataType == dataTypeOptions[i].Value) {
  843. const regRule = dataTypeOptions[i].Rule;
  844. let reg = null;
  845. if (regRule.startsWith('/') && regRule.endsWith('/')) {
  846. reg = new RegExp(regRule.slice(1, -1));
  847. } else {
  848. reg = new RegExp(regRule);
  849. }
  850. if (!reg.test(e.detail.value)) {
  851. common.showModal('请输入' + dataTypeOptions[i].Text);
  852. questionList[index].AnswerList = '';
  853. answerList[answerIndex].Answer = '';
  854. this.setData({
  855. 'quesList.QuestionList': questionList,
  856. 'quesAnswers.AnswerList': answerList,
  857. });
  858. return;
  859. }
  860. }
  861. }
  862. }
  863. if (questionList[index].AnswerList.length == questionList[index].RuleInfo.MaxLength) {
  864. common.showToast('最多输入' + questionList[index].RuleInfo.MaxLength + '个字');
  865. return;
  866. }
  867. answerList.forEach((itm, ind) => {
  868. if (itm.QuestId == questionList[index].QuestId) {
  869. answerIndex = ind;
  870. }
  871. });
  872. questionList[index].AnswerList = e.detail.value;
  873. }
  874. answerList[answerIndex].Answer = e.detail.value;
  875. quesList.value.QuestionList = questionList;
  876. quesAnswers.AnswerList = answerList;
  877. };
  878. /** 提交 */
  879. const submit = () => {
  880. throttle(async () => {
  881. await common.sleep(1000);
  882. if (complete.value) return;
  883. uni.showLoading();
  884. const answers = { ...quesAnswers } as any;
  885. for (var i = 0; i < answers.AnswerList.length; i++) {
  886. let item = answers.AnswerList[i];
  887. if (item.MustQuest && common.isEmpty(item.Answer)) {
  888. common.showToast('存在未填写的问卷');
  889. point.value = 'p' + item.Blank;
  890. return;
  891. }
  892. }
  893. answers.AnswerList.forEach((item) => {
  894. if (typeof item.Answer == 'object') {
  895. item.Answer = item.Answer.join();
  896. }
  897. });
  898. const cardNo = currentUser.value?.cardNo ?? ''
  899. const cardType = currentUser.value?.cardType ?? ''
  900. let mobile = currentUser.value?.mobile ?? ''
  901. let memberName = currentUser.value?.memberName ?? ''
  902. queryPatient.cardNo = cardNo;
  903. queryPatient.cardType = cardType;
  904. let patientInfoRes = await QueryMemberByCard_V3(queryPatient);
  905. console.log('患者信息:', patientInfoRes);
  906. let patientInfo = patientInfoRes.resData;
  907. console.log('患者信息:', patientInfo);
  908. if (!patientInfo) {
  909. uni.hideLoading();
  910. return;
  911. }
  912. console.log('患者信息:', patientInfo);
  913. if (patientInfo.RespCode === '10000' && patientInfo.Data && patientInfo.Data.length > 0) {
  914. mobile = patientInfo.Data[0].mobile;
  915. memberName = patientInfo.Data[0].memberName;
  916. }
  917. console.log('mobile:', mobile);
  918. console.log('memberName:', memberName);
  919. answers.AnswerList = JSON.stringify(quesAnswers.AnswerList);
  920. // 安全读取 currentUser 字段,缺失则置空
  921. const memberId = currentUser.value?.MemberId ?? currentUser.value?.memberId ?? currentUser.value?.cardNo ?? ''
  922. const sex = currentUser.value?.sex ?? ''
  923. const age = currentUser.value?.age ?? ''
  924. // quesAnswers.IP = (await getIP()).cip;
  925. // quesAnswers.Location = (await getIP()).cname;
  926. quesAnswers.UserAgent = app.globalData.smallPro_systemInfo;
  927. quesAnswers.Mobile = mobile;
  928. quesAnswers.UserName = memberName;
  929. quesAnswers.MemberId = memberId;
  930. quesAnswers.Sex = sex;
  931. quesAnswers.Age = age;
  932. quesAnswers.ThirdPartyId = memberId || uni.getStorageSync('openid');
  933. quesAnswers.BedNo = '';
  934. quesAnswers.HospitalNo = objType.value == '4' ? cardNo : '';
  935. quesAnswers.CardNo = objType.value == '3' ? cardNo : '';
  936. quesAnswers.TaskId = taskId.value;
  937. quesAnswers.CardType = objType.value == '3' ? cardType : '';
  938. let res = await CommitAnswer_V3(quesAnswers);
  939. clearTimeout(time);
  940. if (common.isNotEmpty(res)) {
  941. common.showModal('提交成功!', () => {
  942. common.navigateBack(1);
  943. });
  944. }
  945. }, 5 * 1000);
  946. };
  947. /** 获取IP */
  948. const getIP = () => {
  949. return new Promise((resolve, reject) => {
  950. uni.request({
  951. url: 'https://pv.sohu.com/cityjson?ie=utf-8',
  952. success: (res: any) => {
  953. const result = res.data.substring(res.data.indexOf('{'), res.data.lastIndexOf('}') + 1);
  954. const obj = JSON.parse(result);
  955. resolve(obj);
  956. },
  957. });
  958. }) as Promise<any>;
  959. };
  960. const goBack = () => {
  961. uni.navigateBack({
  962. delta: 1,
  963. });
  964. };
  965. const yjfk = () => {};
  966. const goSelMember = () => {};
  967. const confirmMember = () => {};
  968. useOnLoad((options) => {
  969. main(options);
  970. });
  971. </script>
  972. <style lang="scss" scoped>
  973. .align_items_left {
  974. align-items: flex-start;
  975. }
  976. .active_option {
  977. background: #18ba89 !important;
  978. color: white !important;
  979. }
  980. .mask_form {
  981. width: 100%;
  982. height: 100%;
  983. position: absolute;
  984. top: 0;
  985. left: 0;
  986. z-index: 100;
  987. }
  988. .container {
  989. overflow: hidden;
  990. }
  991. .scroll_view {
  992. height: 100%;
  993. }
  994. .top_bg_box {
  995. position: relative;
  996. image {
  997. width: 100%;
  998. height: 456rpx;
  999. position: absolute;
  1000. top: 0;
  1001. left: 0;
  1002. z-index: 1;
  1003. }
  1004. .ques_introduce {
  1005. padding: 46rpx 52rpx 0 52rpx;
  1006. box-sizing: border-box;
  1007. position: absolute;
  1008. top: 0;
  1009. left: 0;
  1010. z-index: 2;
  1011. text:nth-child(1) {
  1012. font-size: 36rpx;
  1013. font-weight: bold;
  1014. color: white;
  1015. margin-bottom: 20rpx;
  1016. }
  1017. text:nth-child(2) {
  1018. line-height: 45rpx;
  1019. font-size: 28rpx;
  1020. color: white;
  1021. }
  1022. }
  1023. }
  1024. .main_box {
  1025. padding: 470rpx 30rpx 190rpx 30rpx;
  1026. box-sizing: border-box;
  1027. position: relative;
  1028. z-index: 2;
  1029. }
  1030. .ques_item_box {
  1031. padding: 30rpx;
  1032. box-sizing: border-box;
  1033. background: white;
  1034. border-radius: 20rpx;
  1035. margin-bottom: 32rpx;
  1036. > .ques_title_box > text {
  1037. line-height: 50rpx;
  1038. font-size: 36rpx;
  1039. font-weight: bold;
  1040. color: #1c1c1c;
  1041. }
  1042. .mustQuest_tag {
  1043. color: #dc2828;
  1044. }
  1045. }
  1046. .ques_options {
  1047. margin-top: 34rpx;
  1048. }
  1049. .choice_item {
  1050. width: 100%;
  1051. line-height: 80rpx;
  1052. font-size: 30rpx;
  1053. color: #686868;
  1054. text-align: center;
  1055. margin-bottom: 16rpx;
  1056. border-radius: 10rpx;
  1057. background: #f8f8fa;
  1058. &:last-child {
  1059. margin-bottom: 0;
  1060. }
  1061. }
  1062. .input_label {
  1063. line-height: 40rpx;
  1064. font-size: 32rpx;
  1065. color: #474747;
  1066. }
  1067. .textarea_box {
  1068. width: 100%;
  1069. padding: 20rpx;
  1070. box-sizing: border-box;
  1071. border-radius: 10rpx;
  1072. background: #f8f8fa;
  1073. margin-top: 22rpx;
  1074. textarea {
  1075. width: 100%;
  1076. }
  1077. }
  1078. .matrix_textarea_box {
  1079. width: 70%;
  1080. }
  1081. .picker_box {
  1082. width: 100%;
  1083. }
  1084. .picker {
  1085. width: 100%;
  1086. height: 80rpx;
  1087. padding: 22rpx;
  1088. box-sizing: border-box;
  1089. background: #f9f9f9;
  1090. border-radius: 20rpx;
  1091. justify-content: space-between;
  1092. text {
  1093. white-space: nowrap;
  1094. font-size: 28rpx;
  1095. color: #686868;
  1096. }
  1097. image {
  1098. width: 12rpx;
  1099. height: 24rpx;
  1100. }
  1101. }
  1102. .matrix_options {
  1103. width: 100%;
  1104. margin-bottom: 34rpx;
  1105. justify-content: space-between;
  1106. text {
  1107. font-size: 30rpx;
  1108. color: #1c1c1c;
  1109. text-align: center;
  1110. padding: 20rpx;
  1111. box-sizing: border-box;
  1112. word-wrap: break-word;
  1113. word-break: break-all;
  1114. }
  1115. }
  1116. .matrix_border {
  1117. border: 1px solid #f0f0f0;
  1118. }
  1119. .matrix_options_title {
  1120. background: #f5f5f5;
  1121. }
  1122. .matrix_icon_box {
  1123. width: 100%;
  1124. align-items: flex-start;
  1125. text {
  1126. font-size: 30rpx;
  1127. color: #1c1c1c;
  1128. margin-bottom: 36rpx;
  1129. padding: 0 20rpx;
  1130. box-sizing: border-box;
  1131. }
  1132. image {
  1133. width: 40rpx;
  1134. height: 40rpx;
  1135. }
  1136. }
  1137. .sub_title {
  1138. background: none;
  1139. }
  1140. .img_list {
  1141. width: 100%;
  1142. margin-bottom: 24rpx;
  1143. justify-content: flex-start;
  1144. flex-wrap: wrap;
  1145. .item_img {
  1146. width: 100%;
  1147. height: 100%;
  1148. }
  1149. }
  1150. .add_img {
  1151. width: 32%;
  1152. height: 200rpx;
  1153. margin-right: 2%;
  1154. margin-bottom: 3%;
  1155. position: relative;
  1156. &:nth-child(3n) {
  1157. margin-right: 0;
  1158. }
  1159. }
  1160. .add_img_tips {
  1161. width: 100%;
  1162. text {
  1163. font-size: 30rpx;
  1164. color: #474747;
  1165. }
  1166. }
  1167. .cha_img {
  1168. width: 50rpx;
  1169. height: 50rpx;
  1170. position: absolute;
  1171. top: -15rpx;
  1172. right: -5rpx;
  1173. }
  1174. .options_item_box {
  1175. width: 100%;
  1176. padding: 0 10rpx;
  1177. box-sizing: border-box;
  1178. margin-bottom: 20rpx;
  1179. justify-content: space-between;
  1180. text {
  1181. font-size: 28rpx;
  1182. color: #686868;
  1183. word-wrap: break-word;
  1184. word-break: break-all;
  1185. }
  1186. image {
  1187. width: 40rpx;
  1188. height: 40rpx;
  1189. margin: 20rpx 0;
  1190. }
  1191. }
  1192. .matrix_input_box {
  1193. width: 100%;
  1194. text {
  1195. width: 30%;
  1196. white-space: nowrap;
  1197. }
  1198. input {
  1199. width: 70%;
  1200. }
  1201. }
  1202. .footer_box {
  1203. width: 100%;
  1204. padding: 30rpx 30rpx 60rpx 30rpx;
  1205. box-sizing: border-box;
  1206. background: white;
  1207. position: fixed;
  1208. bottom: 0;
  1209. left: 0;
  1210. z-index: 10;
  1211. text {
  1212. width: 100%;
  1213. line-height: 88rpx;
  1214. font-size: 36rpx;
  1215. color: white;
  1216. text-align: center;
  1217. border-radius: 88rpx;
  1218. background: #18ba89;
  1219. display: block;
  1220. }
  1221. }
  1222. .modal_wrap {
  1223. width: 100%;
  1224. height: 100%;
  1225. background-color: rgba(0, 0, 0, 0.6);
  1226. position: fixed;
  1227. left: 0;
  1228. top: 0;
  1229. z-index: 99;
  1230. display: flex;
  1231. align-items: center;
  1232. justify-content: center;
  1233. }
  1234. .modal_box {
  1235. width: 600rpx;
  1236. max-height: 600rpx;
  1237. background-color: #fff;
  1238. border-radius: 5px;
  1239. padding: 40rpx 40rpx 60rpx;
  1240. }
  1241. .modal_tit {
  1242. text-align: center;
  1243. font-size: 30rpx;
  1244. }
  1245. .modal_box_b1 {
  1246. background-color: #f2f2f2;
  1247. border-radius: 5px;
  1248. line-height: 80rpx;
  1249. margin-top: 40rpx;
  1250. /* padding-left: 40rpx; */
  1251. text-align: center;
  1252. }
  1253. .modal_user_item {
  1254. background: #f2f2f2;
  1255. padding: 30rpx;
  1256. margin-top: 40rpx;
  1257. position: relative;
  1258. }
  1259. .modal_user_right_img {
  1260. width: 12rpx;
  1261. height: 21rpx;
  1262. position: absolute;
  1263. right: 30rpx;
  1264. top: 0;
  1265. bottom: 0;
  1266. margin: auto 0;
  1267. }
  1268. .modal_t1 {
  1269. font-weight: bold;
  1270. display: inline-block;
  1271. margin-right: 20rpx;
  1272. font-size: 32rpx;
  1273. }
  1274. .modal_t3 {
  1275. margin-top: 20rpx;
  1276. }
  1277. .modal_btn {
  1278. width: 46%;
  1279. line-height: 75rpx;
  1280. text-align: center;
  1281. border-radius: 50rpx;
  1282. margin-top: 40rpx;
  1283. }
  1284. .modal_btn1 {
  1285. background: #aaaaaa;
  1286. color: #fff;
  1287. }
  1288. .modal_btn2 {
  1289. background: #61c88f;
  1290. color: #fff;
  1291. }
  1292. .yjfl {
  1293. position: fixed;
  1294. bottom: 340rpx;
  1295. right: 0;
  1296. z-index: 100;
  1297. width: 160rpx;
  1298. text-align: center;
  1299. .title {
  1300. color: #fff;
  1301. position: absolute;
  1302. bottom: 10rpx;
  1303. right: 4rpx;
  1304. width: 100%;
  1305. text-align: center;
  1306. font-size: 24rpx;
  1307. }
  1308. }
  1309. </style>