|
@@ -1,29 +1,33 @@
|
|
|
-import { defineComponent, reactive, ref, onMounted } from "vue";
|
|
|
+import { defineComponent, reactive, ref, onMounted, computed } from "vue";
|
|
|
import styles from "./index.module.less";
|
|
|
-import iconClose from "../icons/close2.svg";
|
|
|
-import { Button, Cell, Field, Tab, Tabs, showToast } from "vant";
|
|
|
-import iconSubmit from "../icons/icon-submit.svg";
|
|
|
+import { Button, Cell, Field, Tab, Tabs, showToast, DropdownMenu, DropdownItem, Uploader } from "vant";
|
|
|
import { sysSuggestionAdd, getSuggestionList } from "/src/page-instrument/api";
|
|
|
import { storeData } from "/src/store";
|
|
|
import state, { IPlatform } from "/src/state";
|
|
|
+import { headImg } from "/src/page-instrument/header-top/image";
|
|
|
+import { fileUpload } from "/src/helpers/oss-file-upload"
|
|
|
|
|
|
export default defineComponent({
|
|
|
name: "recommendation",
|
|
|
emits: ["close"],
|
|
|
setup(props, { emit }) {
|
|
|
- const suggestionTypeList = ref([] as any);
|
|
|
- const tags = ["识别不准", "无法评测", "不出评测结果", "曲谱不一致", "指法错误", "其他"];
|
|
|
+ const suggestionTypeList = ref<any[]>([]);
|
|
|
const recommenData = reactive({
|
|
|
- loading: false,
|
|
|
- active: "识别不准",
|
|
|
message: "",
|
|
|
- suggestId: null,
|
|
|
+ suggestId: "",
|
|
|
});
|
|
|
+ const fileList = ref<any[]>([]) // 上传列表
|
|
|
// 获取建议类别
|
|
|
const getTypeList = async () => {
|
|
|
try {
|
|
|
- const res = await getSuggestionList({ rows: 9999, page: 1 });
|
|
|
- suggestionTypeList.value = res.data.rows || [];
|
|
|
+ const res = await getSuggestionList({ rows: 9999, page: 1, useClient: "SMART_PRACTICE" });
|
|
|
+ const data = res.data.rows || [];
|
|
|
+ suggestionTypeList.value = data.map((item:any) => {
|
|
|
+ return {
|
|
|
+ text: item.name,
|
|
|
+ value: item.id
|
|
|
+ }
|
|
|
+ })
|
|
|
} catch (e) {
|
|
|
//
|
|
|
}
|
|
@@ -32,65 +36,106 @@ export default defineComponent({
|
|
|
/** 提交意见反馈 */
|
|
|
const handleSubmit = async () => {
|
|
|
if (!recommenData.message || !recommenData.suggestId) {
|
|
|
- const desc = !recommenData.suggestId ? '请先选择问题类型' : '请先填写意见反馈'
|
|
|
+ const desc = !recommenData.suggestId ? '请先选择反馈类型' : '请先填写意见反馈'
|
|
|
showToast({
|
|
|
message: desc,
|
|
|
position: "top",
|
|
|
});
|
|
|
return;
|
|
|
}
|
|
|
- recommenData.loading = true;
|
|
|
try {
|
|
|
+ const attachmentUrlsArr = fileList.value.reduce((arr,item)=>{
|
|
|
+ item.url && arr.push(item.url)
|
|
|
+ return arr
|
|
|
+ },[])
|
|
|
await sysSuggestionAdd({
|
|
|
content: recommenData.message,
|
|
|
type: "SMART_PRACTICE",
|
|
|
suggestionTypeId: recommenData.suggestId,
|
|
|
- mobileNo: storeData.user?.phone
|
|
|
+ mobileNo: storeData.user?.phone,
|
|
|
+ attachmentUrls: attachmentUrlsArr.join(",")
|
|
|
});
|
|
|
showToast({
|
|
|
message: "意见反馈已提交",
|
|
|
position: "top",
|
|
|
});
|
|
|
emit("close");
|
|
|
- recommenData.suggestId = null
|
|
|
+ recommenData.suggestId = ""
|
|
|
recommenData.message = ''
|
|
|
+ fileList.value = []
|
|
|
} catch (error) {}
|
|
|
- recommenData.loading = false;
|
|
|
+ };
|
|
|
+ const currItem = computed(()=>{
|
|
|
+ const currItem = suggestionTypeList.value.find((item:any)=>{
|
|
|
+ return item.value === recommenData.suggestId
|
|
|
+ })
|
|
|
+ return currItem
|
|
|
+ })
|
|
|
+ /* 文件上传 */
|
|
|
+ const afterRead = (file:any[]|Record<string,any>) => {
|
|
|
+ let files:any[] = []
|
|
|
+ if(Array.isArray(file)){
|
|
|
+ files = file.map(item =>{
|
|
|
+ item.status = 'uploading';
|
|
|
+ item.message = '上传中...';
|
|
|
+ item.key = new Date().getTime() + item.file.name
|
|
|
+ return item
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ file.status = 'uploading';
|
|
|
+ file.message = '上传中...';
|
|
|
+ file.key = new Date().getTime() + file.file.name
|
|
|
+ files.push(file)
|
|
|
+ }
|
|
|
+ files.map(async item=>{
|
|
|
+ try {
|
|
|
+ const url = await fileUpload(item.key,item.file)
|
|
|
+ item.status = ""
|
|
|
+ item.url = url
|
|
|
+ }catch{
|
|
|
+ item.status = "failed"
|
|
|
+ item.message = "上传失败"
|
|
|
+ }
|
|
|
+ })
|
|
|
+ };
|
|
|
+ const maxSize = 5
|
|
|
+ const onOversize = () => {
|
|
|
+ showToast(`文件大小不能超过 ${maxSize}M`);
|
|
|
};
|
|
|
onMounted(() => {
|
|
|
getTypeList();
|
|
|
});
|
|
|
return () => (
|
|
|
- <div class={[styles.content, state.platform === IPlatform.PC && styles.pcContent]}>
|
|
|
- { state.platform === IPlatform.PC && <div class={'top_drag'}></div> }
|
|
|
- <Tabs lineHeight={0} color="#1A1A1A">
|
|
|
- <Tab title="意见反馈">
|
|
|
- <Cell border={false} title="请选择问题类型" />
|
|
|
- <div class={styles.tags}>
|
|
|
- {suggestionTypeList.value.map((item: any) => (
|
|
|
- <span
|
|
|
- class={[styles.tag, recommenData.suggestId === item.id && styles.active]}
|
|
|
- onClick={() => (recommenData.suggestId = item.id)}
|
|
|
- >
|
|
|
- {item.name}
|
|
|
- </span>
|
|
|
- ))}
|
|
|
- </div>
|
|
|
+ <div class={[styles.recommendation]}>
|
|
|
+ <div class={styles.head}>
|
|
|
+ <img class={styles.headTit} src={headImg("recommendationName.png")} />
|
|
|
+ <img class={styles.closeImg} src={headImg("closeImg.png")} onClick={()=>{ emit("close") }} />
|
|
|
+ </div>
|
|
|
+ <div class={styles.content}>
|
|
|
+ <div class={styles.conBox}>
|
|
|
+ <DropdownMenu class={[styles.dropdownMenu, currItem.value && styles.currItem]} overlay={false}>
|
|
|
+ <DropdownItem class={['recommendationDropdownItem']} title={ currItem.value?currItem.value.name:"请选择反馈类型"} v-model={recommenData.suggestId} options={suggestionTypeList.value}/>
|
|
|
+ </DropdownMenu>
|
|
|
<Field
|
|
|
+ class={styles.field}
|
|
|
v-model={recommenData.message}
|
|
|
- rows="2"
|
|
|
- autosize={{ maxHeight: 44 }}
|
|
|
border={false}
|
|
|
type="textarea"
|
|
|
maxlength={200}
|
|
|
- placeholder="请详细描述您遇到的问题,以便我们尽快为您解决!"
|
|
|
- show-word-limit
|
|
|
+ placeholder="请详细描述您遇到的问题,以便我们尽快为您解决"
|
|
|
/>
|
|
|
- <Cell>
|
|
|
- <img class={styles.btn} src={iconSubmit} onClick={handleSubmit} />
|
|
|
- </Cell>
|
|
|
- </Tab>
|
|
|
- </Tabs>
|
|
|
+ <Uploader accept=".jpg,jpeg,.png" class={styles.uploader} max-size={maxSize * 1024 * 1024} onOversize={onOversize} v-model={fileList.value} after-read={afterRead} multiple max-count={4}>
|
|
|
+ <div class={styles.uploaderbox}>
|
|
|
+ <img class={styles.img} src={headImg("photo.png")}></img>
|
|
|
+ <div>上传图片</div>
|
|
|
+ </div>
|
|
|
+ </Uploader>
|
|
|
+ <div class={styles.btnCon}>
|
|
|
+ <img class={styles.img} src={headImg("qx.png")} onClick={()=>{ emit("close") }}></img>
|
|
|
+ <img class={styles.img} src={headImg("tj.png")} onClick={handleSubmit}></img>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
);
|
|
|
},
|