index.tsx 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. import { defineComponent, reactive, ref, onMounted } from "vue";
  2. import styles from "./index.module.less";
  3. import iconClose from "../icons/close2.svg";
  4. import { Button, Cell, Field, Tab, Tabs, showToast } from "vant";
  5. import iconSubmit from "../icons/icon-submit.svg";
  6. import { sysSuggestionAdd, getSuggestionList } from "/src/page-instrument/api";
  7. import { storeData } from "/src/store";
  8. import state, { IPlatform } from "/src/state";
  9. export default defineComponent({
  10. name: "recommendation",
  11. emits: ["close"],
  12. setup(props, { emit }) {
  13. const suggestionTypeList = ref([] as any);
  14. const tags = ["识别不准", "无法评测", "不出评测结果", "曲谱不一致", "指法错误", "其他"];
  15. const recommenData = reactive({
  16. loading: false,
  17. active: "识别不准",
  18. message: "",
  19. suggestId: null,
  20. });
  21. // 获取建议类别
  22. const getTypeList = async () => {
  23. try {
  24. const res = await getSuggestionList({ rows: 9999, page: 1 });
  25. suggestionTypeList.value = res.data.rows || [];
  26. } catch (e) {
  27. //
  28. }
  29. };
  30. /** 提交意见反馈 */
  31. const handleSubmit = async () => {
  32. if (!recommenData.message || !recommenData.suggestId) {
  33. const desc = !recommenData.suggestId ? '请先选择问题类型' : '请先填写意见反馈'
  34. showToast({
  35. message: desc,
  36. position: "top",
  37. });
  38. return;
  39. }
  40. recommenData.loading = true;
  41. try {
  42. await sysSuggestionAdd({
  43. content: recommenData.message,
  44. type: "SMART_PRACTICE",
  45. suggestionTypeId: recommenData.suggestId,
  46. mobileNo: storeData.user?.phone
  47. });
  48. showToast({
  49. message: "意见反馈已提交",
  50. position: "top",
  51. });
  52. emit("close");
  53. recommenData.suggestId = null
  54. recommenData.message = ''
  55. } catch (error) {}
  56. recommenData.loading = false;
  57. };
  58. onMounted(() => {
  59. getTypeList();
  60. });
  61. return () => (
  62. <div class={[styles.content, state.platform === IPlatform.PC && styles.pcContent]}>
  63. { state.platform === IPlatform.PC && <div class={'top_drag'}></div> }
  64. <Tabs lineHeight={0} color="#1A1A1A">
  65. <Tab title="意见反馈">
  66. <Cell border={false} title="请选择问题类型" />
  67. <div class={styles.tags}>
  68. {suggestionTypeList.value.map((item: any) => (
  69. <span
  70. class={[styles.tag, recommenData.suggestId === item.id && styles.active]}
  71. onClick={() => (recommenData.suggestId = item.id)}
  72. >
  73. {item.name}
  74. </span>
  75. ))}
  76. </div>
  77. <Field
  78. v-model={recommenData.message}
  79. rows="2"
  80. autosize={{ maxHeight: 44 }}
  81. border={false}
  82. type="textarea"
  83. maxlength={200}
  84. placeholder="请详细描述您遇到的问题,以便我们尽快为您解决!"
  85. show-word-limit
  86. />
  87. <Cell>
  88. <img class={styles.btn} src={iconSubmit} onClick={handleSubmit} />
  89. </Cell>
  90. </Tab>
  91. </Tabs>
  92. </div>
  93. );
  94. },
  95. });