collection.vue 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. <template>
  2. <div class="app-container">
  3. <el-form validate-on-rule-change :rules="rules" ref="form" :model="form" label-width="140px">
  4. <!-- <el-button v-if="form.id" size="mini" type="text" @click="handleShare" icon="el-icon-coin"
  5. v-hasPermi="['hisStore:collection:WxaCodeCollectionUnLimit']">分享
  6. </el-button> -->
  7. <el-form-item label="信息模板" prop="questionId">
  8. <el-select @change="selectQuestion" v-model="form.questionId" placeholder="请选择问答">
  9. <el-option v-for="dict in questionOptions" :key="dict.dictValue" :label="dict.dictLabel"
  10. :value="parseInt(dict.dictValue)" />
  11. </el-select>
  12. </el-form-item>
  13. <div style="margin-bottom: 20px;margin-top: 20px;" v-for="(answer, index) in form.answers">
  14. <div style="margin-bottom: 20px;margin-top: 20px;" >
  15. <span style="font-size: 15px;font-weight: bold; margin-left: 31px">{{ answer.title }}</span>
  16. </div>
  17. <div style="margin-left: 31px;">
  18. <el-checkbox-group v-model="form.answers[index].value" size="mini">
  19. <el-checkbox v-for="dict in answer.options" :label="dict.value">{{ dict.name }}</el-checkbox>
  20. </el-checkbox-group>
  21. <!-- <el-radio-group :disabled="form.answers[index].flag" v-model="form.answers[index].value">
  22. <el-radio v-for="dict in answer.options" :label="dict.value">{{ dict.name }}</el-radio>
  23. </el-radio-group> -->
  24. </div>
  25. </div>
  26. <el-form-item label="用户姓名" prop="userName">
  27. <el-input v-model="form.userName" placeholder="请输入用户姓名"></el-input>
  28. </el-form-item>
  29. <el-form-item label="用户手机号后四位" prop="userPhoneFour">
  30. <el-input v-model="form.userPhoneFour" placeholder="请输入手机号后四位"></el-input>
  31. </el-form-item>
  32. <el-form-item label="用户性别" prop="sex">
  33. <el-select v-model="form.sex" placeholder="请选择用户性别">
  34. <el-option label="男" :value="1" />
  35. <el-option label="女" :value="0" />
  36. </el-select>
  37. </el-form-item>
  38. <el-form-item label="过敏情况" prop="allergy">
  39. <el-input type="textarea" :rows="2" placeholder="请输入过敏情况" v-model="form.allergy">
  40. </el-input>
  41. </el-form-item>
  42. <el-form-item label="备注" prop="remark">
  43. <el-input type="textarea" :rows="2" placeholder="请输入备注" v-model="form.remark">
  44. </el-input>
  45. </el-form-item>
  46. <el-form-item v-if="form.questionId" label="是否关联产品疗法" prop="isPackage">
  47. <el-radio-group v-model="form.isPackage">
  48. <el-radio :label="0">否</el-radio>
  49. <el-radio :label="1">是</el-radio>
  50. </el-radio-group>
  51. </el-form-item>
  52. <el-form-item v-if="form.isPackage == 1" label="产品疗法" prop="packageId">
  53. <el-select filterable v-model="form.packageId" placeholder="请选择产品疗法">
  54. <el-option v-for="dict in privatePackageOptions" :key="dict.dictValue" :label="dict.dictLabel"
  55. :value="parseInt(dict.dictValue)" />
  56. </el-select>
  57. </el-form-item>
  58. <el-form-item v-if="form.packageId && form.isPackage && form.isPackage == 1" label="支付类型" prop="payType">
  59. <el-radio-group v-model="form.payType">
  60. <el-radio :label="1">全款</el-radio>
  61. <el-radio :label="2">物流代收</el-radio>
  62. </el-radio-group>
  63. </el-form-item>
  64. <el-form-item v-if="form.packageId && form.payType == 2 && form.isPackage && form.isPackage == 1"
  65. label="预付金额" prop="amount">
  66. <el-input v-model="form.amount" placeholder="请输入物流代收金额" type="number" />
  67. </el-form-item>
  68. </el-form>
  69. <div slot="footer" class="dialog-footer">
  70. <el-button type="primary" @click="submitForm">确 定</el-button>
  71. <!-- <el-button @click="cancel">取 消</el-button> -->
  72. </div>
  73. <el-dialog :title="collectionForm.title" v-if="collectionForm.open" :visible.sync="collectionForm.open"
  74. width="450px" append-to-body>
  75. <div style="padding-bottom:15px;">
  76. <img :src="codeImage" width="400px">
  77. </div>
  78. <div slot="footer" class="dialog-footer">
  79. <el-button @click="downloadImage(codeImage, collectionForm.name + '.png')">下载二维码</el-button>
  80. </div>
  81. </el-dialog>
  82. </div>
  83. </template>
  84. <script>
  85. import { questionOptions, getAnswer } from "@/api/hisStore/answer";
  86. import { allPrivatePackage } from "@/api/store/package";
  87. import { getInfo, addCollection, updateCollection, getWxaCodeCollectionUnLimit } from "@/api/hisStore/collection";
  88. export default {
  89. name: "collection",
  90. components: {},
  91. data() {
  92. return {
  93. form: {
  94. answers: []
  95. },
  96. userId: null,
  97. questionOptions: [],
  98. privatePackageOptions: [],
  99. collectionForm: {
  100. open: false,
  101. title: "用户信息采集分享",
  102. name: null,
  103. },
  104. codeImage: null,
  105. rules: {
  106. questionId: [
  107. { required: true, message: '请选择信息模板', trigger: 'change' }
  108. ],
  109. packageId: [
  110. { required: true, message: '请选择套餐包', trigger: 'change' }
  111. ],
  112. isPackage: [
  113. { required: true, message: '请选择是否关联套餐包', trigger: 'change' }
  114. ],
  115. payType: [
  116. { required: true, message: '请选择支付类型', trigger: 'change' }
  117. ],
  118. amount: [
  119. { required: true, message: '请填写物流代收金额', trigger: 'blur' }
  120. ]
  121. }
  122. };
  123. },
  124. created() {
  125. this.getQuestionOptions();
  126. this.getAllPrivatePackge();
  127. },
  128. methods: {
  129. downloadImage(imageSrc, fileName) {
  130. const link = document.createElement('a');
  131. link.href = imageSrc;
  132. link.download = fileName || '付款二维码.png';
  133. document.body.appendChild(link);
  134. link.click();
  135. document.body.removeChild(link);
  136. },
  137. handleShare(id) {
  138. let loadingRock = this.$loading({
  139. lock: true,
  140. text: '生成二维码中~~请不要刷新页面!!',
  141. spinner: 'el-icon-loading',
  142. background: 'rgba(0, 0, 0, 0.7)'
  143. });
  144. getWxaCodeCollectionUnLimit(id).then(response => {
  145. this.codeImage = response.url
  146. this.collectionForm.open = true;
  147. this.collectionForm.name = id;
  148. loadingRock.close();
  149. }).finally(res => {
  150. loadingRock.close();
  151. })
  152. },
  153. //获取问答模板
  154. getQuestionOptions() {
  155. console.log("this.userId", this.userId)
  156. questionOptions().then(response => {
  157. this.questionOptions = response.rows;
  158. })
  159. },
  160. getAllPrivatePackge() {
  161. allPrivatePackage().then(res => {
  162. this.privatePackageOptions = res.rows;
  163. })
  164. },
  165. getCollectionInfo(userId) {
  166. const queryParams = {
  167. userId: userId,
  168. }
  169. this.userId = userId;
  170. getInfo(queryParams).then(res => {
  171. if (res.data.id) {
  172. this.form = res.data;
  173. } else {
  174. this.form = {
  175. answers: []
  176. }
  177. }
  178. })
  179. },
  180. //选择问答模板
  181. selectQuestion(val) {
  182. console.log(val)
  183. this.form = {
  184. answers: []
  185. };
  186. const queryParams = {
  187. userId: this.userId,
  188. questionId: val
  189. }
  190. getInfo(queryParams).then(res => {
  191. this.form = res.data;
  192. })
  193. // getAnswer(val).then(response =>{
  194. // this.form.answers = response.data.answers;
  195. // console.log(this.form)
  196. // })
  197. },
  198. submitForm() {
  199. console.log(this.form)
  200. this.form.userId = this.userId;
  201. this.$refs["form"].validate(valid => {
  202. if (valid) {
  203. if (this.form.id != null) {
  204. updateCollection(this.form).then(res => {
  205. this.msgSuccess("修改成功");
  206. this.open = false;
  207. this.$parent.$parent.closeCollection();
  208. this.$refs['form'].resetFields();
  209. this.handleShare(res.data);
  210. })
  211. } else {
  212. addCollection(this.form).then(res => {
  213. this.msgSuccess("添加成功");
  214. this.open = false;
  215. this.$parent.$parent.closeCollection();
  216. this.$refs['form'].resetFields();
  217. this.handleShare(res.data);
  218. })
  219. }
  220. // this.resetForm("form");
  221. }
  222. });
  223. },
  224. cancel() {
  225. },
  226. },
  227. };
  228. </script>