| | |
| | | if (eTime) { |
| | | url += `eTime=${eTime}&`; |
| | | } |
| | | return $clue.get( |
| | | `${url}pageNum=${pageNum}&pageSize=${pageSize}` |
| | | ); |
| | | return $clue.get(`${url}pageNum=${pageNum}&pageSize=${pageSize}`); |
| | | // .then((res) => res.data); |
| | | }, |
| | | |
| | | /** |
| | |
| | | * @returns |
| | | */ |
| | | fetchRemoteClue(updateTime) { |
| | | return $clue.get(`clue/fetch/remote?updateTime=${updateTime}`); |
| | | return $clue |
| | | .get(`clue/fetch/remote?updateTime=${updateTime}`) |
| | | .then((res) => res.data); |
| | | }, |
| | | |
| | | fetchRemoteClueFileUrl(clueId) { |
| | |
| | | |
| | | /** |
| | | * æ¨é线索çç»è®ºä¸é®é¢ |
| | | * @param {string} clueId |
| | | * @returns |
| | | * @param {string} clueId |
| | | * @returns |
| | | */ |
| | | pushClue(clueId) { |
| | | return $clue.post(`clue/push?clueId=${clueId}`); |
| | | return $clue |
| | | .post(`clue/push?clueId=${clueId}`) |
| | | .then((res) => res.data); |
| | | } |
| | | }; |
| | |
| | | * @param {string} clueId 线索id |
| | | */ |
| | | getConclusion(clueId) { |
| | | return $clue.get(`clue/conclusion/fetch?clueId=${clueId}`); |
| | | return $clue.get(`clue/conclusion/fetch?clueId=${clueId}`).then((res) => res.data); |
| | | }, |
| | | |
| | | /** |
| | |
| | | * @returns |
| | | */ |
| | | uploadConclusion(conclusion) { |
| | | return $clue.post(`clue/conclusion/upload`, conclusion); |
| | | return $clue.post(`clue/conclusion/upload`, conclusion).then((res) => res.data); |
| | | }, |
| | | |
| | | /** |
| | |
| | | * @returns |
| | | */ |
| | | pushConclusion(conclusionIdList) { |
| | | return $clue.post(`clue/conclusion/push`, conclusionIdList); |
| | | return $clue.post(`clue/conclusion/push`, conclusionIdList).then((res) => res.data); |
| | | } |
| | | }; |
| | |
| | | return $clue |
| | | .get(`clue/question/fetch?clueId=${clueId}`) |
| | | .then((res) => { |
| | | return getClueQuestionList(res); |
| | | return getClueQuestionList(res.data); |
| | | }); |
| | | }, |
| | | |
| | |
| | | files.forEach((e) => { |
| | | formData.append('images', e); |
| | | }); |
| | | return $clue.post(`clue/question/upload`, formData); |
| | | return $clue.post(`clue/question/upload`, formData).then((res) => res.data); |
| | | }, |
| | | |
| | | deleteQuestion(questionId) { |
| | | return $clue.delete(`clue/question`, { params: { questionId } }).then((res) => res.data); |
| | | }, |
| | | |
| | | uploadQuestionUrl() { |
| | |
| | | * @returns |
| | | */ |
| | | pushQuestion(questionIdList) { |
| | | return $clue.post(`clue/question/push`, questionIdList); |
| | | return $clue.post(`clue/question/push`, questionIdList).then((res) => res.data); |
| | | } |
| | | }; |
| | |
| | | // ElMessage({ |
| | | // message: response.data.message, |
| | | // type: 'success' |
| | | // }); |
| | | // }); |
| | | // } |
| | | return response.data.data; |
| | | return response.data; |
| | | } else { |
| | | ElMessage({ |
| | | message: response.data.message, |
| | |
| | | return Promise.reject(response.data.message); |
| | | } |
| | | } else { |
| | | return response.data; |
| | | return response; |
| | | } |
| | | } else { |
| | | return Promise.reject(response); |
| | |
| | | */ |
| | | fetchGridList(schemeId) { |
| | | return $clue.get(`grid/info/fetch?id=${schemeId}`).then((res) => { |
| | | return getGridRecordList(res); |
| | | return getGridRecordList(res.data); |
| | | }); |
| | | }, |
| | | |
| | |
| | | */ |
| | | createGrid(gridInfo) { |
| | | return $clue.post(`grid/info/create`, gridInfo).then((res) => { |
| | | return getGridRecord(res); |
| | | return getGridRecord(res.data); |
| | | }); |
| | | }, |
| | | |
| | | /** |
| | | * æ´æ°ç½æ ¼ |
| | | * @param {Object} gridInfo |
| | | * @param {Object} gridInfo |
| | | */ |
| | | updateGrid(gridInfo) { |
| | | return $clue.post(`grid/info/update`, gridInfo) |
| | | return $clue |
| | | .post(`grid/info/update`, gridInfo) |
| | | .then((res) => res.data); |
| | | } |
| | | }; |
| | |
| | | * è·åå
¨é¨ç½æ ¼åè§åæ¹æ¡ |
| | | */ |
| | | fetchAllSchemes() { |
| | | return $clue.get(`grid/scheme/fetch`); |
| | | return $clue.get(`grid/scheme/fetch`).then((res) => res.data); |
| | | }, |
| | | |
| | | /** |
| | |
| | | * @param {Object} scheme |
| | | */ |
| | | createScheme(scheme) { |
| | | return $clue.post(`grid/scheme/create`, scheme); |
| | | return $clue.post(`grid/scheme/create`, scheme).then((res) => res.data); |
| | | } |
| | | }; |
| | |
| | | import axios from 'axios'; |
| | | import { setInterceptors } from "./config"; |
| | | |
| | | const url = 'http://47.100.191.150:9031/'; |
| | | // const url = 'http://192.168.0.138:8083/'; |
| | | const imgUrl = 'http://47.100.191.150:9031/images/'; |
| | | // const url = 'http://47.100.191.150:9031/'; |
| | | const url = 'http://192.168.0.110:8084/'; |
| | | // const imgUrl = 'http://47.100.191.150:9031/images/'; |
| | | const imgUrl = 'http://192.168.0.110:8084/images/'; |
| | | |
| | | //é£ç¾½ç管 |
| | | const $clue = axios.create({ |
| | |
| | | DescriptionsList: typeof import('./components/list/DescriptionsList.vue')['default'] |
| | | DescriptionsListItem: typeof import('./components/list/DescriptionsListItem.vue')['default'] |
| | | ElButton: typeof import('element-plus/es')['ElButton'] |
| | | ElButtonGroup: typeof import('element-plus/es')['ElButtonGroup'] |
| | | ElCol: typeof import('element-plus/es')['ElCol'] |
| | | ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider'] |
| | | ElDatePicker: typeof import('element-plus/es')['ElDatePicker'] |
| | |
| | | ElImageViewer: typeof import('element-plus/es')['ElImageViewer'] |
| | | ElInput: typeof import('element-plus/es')['ElInput'] |
| | | ElOption: typeof import('element-plus/es')['ElOption'] |
| | | ElPagination: typeof import('element-plus/es')['ElPagination'] |
| | | ElRadio: typeof import('element-plus/es')['ElRadio'] |
| | | ElRadioButton: typeof import('element-plus/es')['ElRadioButton'] |
| | | ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup'] |
| | |
| | | <span>{{ searchResult.address }}</span> |
| | | <div> |
| | | <span>{{ |
| | | searchResult.lon + ', ' + searchResult.lat |
| | | 'é«å¾·' + searchResult.lon + ', ' + searchResult.lat |
| | | }}</span> |
| | | <el-divider direction="vertical" /> |
| | | <span>{{ |
| | | searchResult.gpsLon + ', ' + searchResult.gpsLat |
| | | 'GPS' + searchResult.gpsLon + ', ' + searchResult.gpsLat |
| | | }}</span> |
| | | </div> |
| | | </div> |
| | |
| | | if (err != 'cancel') { |
| | | errStr = `${confirmTitle}失败, ${err}`; |
| | | } |
| | | ElMessage({ |
| | | message: errStr, |
| | | type: 'warning' |
| | | }); |
| | | // ElMessage({ |
| | | // message: errStr, |
| | | // type: 'warning' |
| | | // }); |
| | | }); |
| | | } |
| | | }) |
¶Ô±ÈÐÂÎļþ |
| | |
| | | /************************************** font size **************************************/ |
| | | $fontsize: ( |
| | | s: var(--el-font-size-small), |
| | | b: var(--el-font-size-base), |
| | | m: var(--el-font-size-medium), |
| | | l: var(--el-font-size-large) |
| | | ); |
| | | |
| | | @each $dName, $dValue in $fontsize { |
| | | .f-#{$dName} { |
| | | font-size: #{$dValue}; |
| | | } |
| | | } |
| | | |
| | | /************************************** color **************************************/ |
| | | $colors: ( |
| | | p: var(--el-color-primary), |
| | | s: var(--el-color-success), |
| | | w: var(--el-color-warning), |
| | | d: var(--el-color-danger), |
| | | e: var(--el-color-error), |
| | | i: var(--el-color-info) |
| | | ); |
| | | |
| | | @each $dName, $dValue in $colors { |
| | | .color-#{$dName} { |
| | | color: #{$dValue}; |
| | | } |
| | | .b-color-#{$dName} { |
| | | background-color: #{$dValue}; |
| | | } |
| | | } |
| | | |
| | | /************************************** å
å¤è¾¹è· **************************************/ |
| | | $direction: ( |
| | | l: 'left', |
| | | t: 'top', |
| | | r: 'right', |
| | | b: 'bottom' |
| | | ); |
| | | $size: (2, 4, 8, 10, 16); |
| | | @each $dName, $dValue in $direction { |
| | | @each $i in $size { |
| | | .p-#{$dName}-#{$i} { |
| | | padding-#{$dValue}: #{$i}px; |
| | | } |
| | | .m-#{$dName}-#{$i} { |
| | | margin-#{$dValue}: #{$i}px; |
| | | } |
| | | } |
| | | } |
| | | |
| | | @each $i in $size { |
| | | .p-#{$i} { |
| | | padding: #{$i}px; |
| | | } |
| | | .p-v-#{$i} { |
| | | padding: #{$i}px 0; |
| | | } |
| | | .p-h-#{$i} { |
| | | padding: 0 #{$i}px; |
| | | } |
| | | .m-#{$i} { |
| | | margin: #{$i}px; |
| | | } |
| | | .m-v-#{$i} { |
| | | margin: #{$i}px 0; |
| | | } |
| | | .m-h-#{$i} { |
| | | margin: 0 #{$i}px; |
| | | } |
| | | } |
| | | |
| | | /************************************** å®½é« **************************************/ |
| | | $csize: ( |
| | | small: var(--el-component-size-small), |
| | | default: var(--el-component-size-default), |
| | | large: var(--el-component-size-large) |
| | | ); |
| | | $ws: (20, 40, 50, 60, 80, 100, 120, 150, 200, 250, 300); |
| | | @each $name, $value in $csize { |
| | | .w-#{$name} { |
| | | width: #{$value}; |
| | | } |
| | | .h-#{$name} { |
| | | height: #{$value}; |
| | | } |
| | | } |
| | | @each $i in $ws { |
| | | .w-#{$i} { |
| | | width: #{$i}px; |
| | | } |
| | | .h-#{$i} { |
| | | height: #{$i}px; |
| | | } |
| | | } |
| | | |
| | | // |
| | | .cursor-p { |
| | | cursor: pointer; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | @use './base.scss'; |
| | | // @use './elementUI.scss'; |
| | |
| | | > |
| | | </div> |
| | | <el-scrollbar height="70vh" class="p-h-1"> |
| | | <ClueList |
| | | :dataList="clueList" |
| | | @itemSelected="selectClue" |
| | | ></ClueList> |
| | | <ClueList :dataList="clueList" @itemSelected="selectClue"> |
| | | <!-- <template #extra> |
| | | <el-button size="small" type="primary" @click="getClues"> |
| | | åå¸ä»»å¡ |
| | | </el-button> |
| | | </template> --> |
| | | </ClueList> |
| | | </el-scrollbar> |
| | | <el-row justify="space-between" class="p-8"> |
| | | <el-pagination |
| | | size="small" |
| | | v-model:current-page="currentPage" |
| | | v-model:page-size="pageSize" |
| | | :page-sizes="[10, 20, 50, 100]" |
| | | :background="true" |
| | | layout="total, sizes, pager" |
| | | :total="total" |
| | | /> |
| | | </el-row> |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | const updateTime = ref(); |
| | | // 线索æ¸
å |
| | | const clueList = ref([]); |
| | | const currentPage = ref(1); |
| | | const pageSize = ref(100); |
| | | const total = ref(0); |
| | | |
| | | /** |
| | | * æ¥è¯¢å·²ä¸åç线索æ¸
å |
| | |
| | | eTime = now.add(1, 'month').format('YYYY-MM-DD HH:mm:ss'); |
| | | } |
| | | onMapMounted(() => { |
| | | clueApi.getClue({ sTime, eTime }).then((res) => { |
| | | clueList.value = res; |
| | | }); |
| | | clueApi |
| | | .getClue({ |
| | | sTime, |
| | | eTime, |
| | | pageNum: currentPage.value, |
| | | pageSize: pageSize.value |
| | | }) |
| | | .then((res) => { |
| | | total.value = res.head.totalCount; |
| | | clueList.value = res.data; |
| | | }); |
| | | }); |
| | | }; |
| | | |
| | |
| | | getClues(); |
| | | }); |
| | | </script> |
| | | <style scoped> |
| | | |
| | | </style> |
| | | <style scoped></style> |
| | |
| | | v-if="!item.delete" |
| | | > |
| | | <div class="clue-item"> |
| | | <div class="flex gap-1"> |
| | | <div class="clue-num">{{ $nf(item.cid) }}</div> |
| | | <el-text class="fy-h1" truncated>{{ |
| | | item.cclueName |
| | | }}</el-text> |
| | | </div> |
| | | <el-row justify="space-between"> |
| | | <el-col span="20"> |
| | | <div class="flex gap-1"> |
| | | <div class="clue-num">{{ $nf(item.cid) }}</div> |
| | | <el-text class="fy-h1" truncated>{{ |
| | | item.cclueName |
| | | }}</el-text> |
| | | </div> |
| | | </el-col> |
| | | <!-- <el-col :span="4"> |
| | | <el-row justify="end"> |
| | | <slot name="extra"></slot> |
| | | </el-row> |
| | | </el-col> --> |
| | | </el-row> |
| | | <el-space> |
| | | <el-row align="middle"> |
| | | <el-text type="info" size="small">ç»è®ºï¼</el-text> |
| | | <!-- <el-text size="small"> --> |
| | | <el-tag |
| | | :type=" |
| | | item.conclusionCount == 1 ? 'success' : 'danger' |
| | | " |
| | | :type="item.cuploaded ? 'success' : 'danger'" |
| | | effect="dark" |
| | | > |
| | | {{ item.conclusionCount == 1 ? 'å·²æ¨é' : 'æªæ¨é' }} |
| | | {{ item.cuploaded ? 'å·²æ¨é' : 'æªæ¨é' }} |
| | | </el-tag> |
| | | <!-- </el-text> --> |
| | | </el-row> |
| | | <el-divider direction="vertical" /> |
| | | <el-row align="middle"> |
| | |
| | | :type="clueData.cuploaded ? 'success' : 'danger'" |
| | | @click="pushCheck" |
| | | :disabled="clueData.cuploaded" |
| | | ><div class="flex-col"> |
| | | > |
| | | <div class="flex-col"> |
| | | <template v-if="clueData.cuploaded"> |
| | | <el-icon><Check /></el-icon> |
| | | <div>å·²</div> |
| | |
| | | <div>å</div> |
| | | <div>é¦</div> |
| | | </template> |
| | | </div></el-button |
| | | </div> |
| | | </el-button> |
| | | <el-button |
| | | class="task-btn" |
| | | :type="clueTask ? 'success' : 'danger'" |
| | | @click="publishTask" |
| | | > |
| | | <div class="flex-col"> |
| | | <template v-if="clueTask"> |
| | | <el-icon><Check /></el-icon> |
| | | <div>æ¥</div> |
| | | <div>ç</div> |
| | | <div>ä»»</div> |
| | | <div>å¡</div> |
| | | </template> |
| | | <template v-else> |
| | | <el-icon><Upload /></el-icon> |
| | | <div>å</div> |
| | | <div>å¸</div> |
| | | <div>ä»»</div> |
| | | <div>å¡</div> |
| | | </template> |
| | | </div> |
| | | </el-button> |
| | | <div class="fy-card"> |
| | | <div class="fy-h1">线索åé¦</div> |
| | | <el-scrollbar height="80vh" class="p-h-1"> |
| | |
| | | <ClueReportConclusion |
| | | :clueId="clueData.cid" |
| | | ></ClueReportConclusion> |
| | | <ClueReportQuestion |
| | | :clueId="clueData.cid" |
| | | ></ClueReportQuestion> |
| | | <ClueReportQuestion :clueData="clueData"></ClueReportQuestion> |
| | | </el-scrollbar> |
| | | </div> |
| | | </CloseButton> |
| | |
| | | }, |
| | | emits: ['update:show', 'pushed'], |
| | | data() { |
| | | return {}; |
| | | return { |
| | | clueTask: undefined |
| | | }; |
| | | }, |
| | | methods: { |
| | | closeEdit() { |
| | |
| | | return clueApi.pushClue(this.clueData.cid).then((res) => { |
| | | this.$emit('pushed', res); |
| | | }); |
| | | }, |
| | | publishTask() { |
| | | |
| | | } |
| | | } |
| | | }; |
| | |
| | | border-bottom-right-radius: 0px; |
| | | /* box-shadow: var(--el-box-shadow-light); */ |
| | | } |
| | | |
| | | .task-btn { |
| | | position: absolute; |
| | | z-index: 1; |
| | | bottom: 2rem; |
| | | left: -2.5rem; |
| | | width: 2.5rem; |
| | | height: initial; |
| | | margin: initial; |
| | | display: flex; |
| | | flex-direction: column; |
| | | align-items: center; |
| | | /* background-color: white; */ |
| | | /* border-color: white; */ |
| | | /* border-top: 1px solid; |
| | | border-left: 1px solid; |
| | | border-bottom: 1px solid; */ |
| | | border-top-right-radius: 0px; |
| | | border-bottom-right-radius: 0px; |
| | | /* box-shadow: var(--el-box-shadow-light); */ |
| | | } |
| | | </style> |
| | |
| | | <template v-for="(item, index) in questionList" :key="index"> |
| | | <DescriptionsList :title="item.cqUid"> |
| | | <template #extra> |
| | | <el-button-group> |
| | | <!-- <el-button |
| | | type="warning" |
| | | size="small" |
| | | plain |
| | | icon="Upload" |
| | | @click="pushQuestion(item)" |
| | | :disabled="item.pushing ? true : item.cqUploaded" |
| | | >{{ |
| | | item.cqUploaded |
| | | ? 'å·²æ¨é' |
| | | : item.pushing |
| | | ? 'æ¨éä¸' |
| | | : 'æ¨éé®é¢' |
| | | }}</el-button |
| | | > --> |
| | | <div> |
| | | <el-button |
| | | type="danger" |
| | | size="small" |
| | | icon="Delete" |
| | | :disabled="clueData.cuploaded" |
| | | @click="deleteQuestion(item)" |
| | | ></el-button> |
| | | <el-button |
| | | type="primary" |
| | | size="small" |
| | | @click="checkQuestion(item)" |
| | | >é®é¢è¯¦æ
</el-button |
| | | >{{ |
| | | clueData.cuploaded ? 'é®é¢è¯¦æ
' : 'ä¿®æ¹é®é¢' |
| | | }}</el-button |
| | | > |
| | | </el-button-group> |
| | | </div> |
| | | </template> |
| | | <DescriptionsListItem |
| | | label="é®é¢åç§°" |
| | |
| | | <!-- <el-divider /> --> |
| | | </template> |
| | | <div class="btn-wrap"> |
| | | <el-button type="primary" @click="openDialog" |
| | | <el-button |
| | | v-if="!clueData.cuploaded" |
| | | type="primary" |
| | | @click="openDialog" |
| | | >æ·»å é®é¢</el-button |
| | | > |
| | | </div> |
| | |
| | | </el-empty> |
| | | </div> |
| | | <QuestionDetail |
| | | :clueId="clueId" |
| | | :clueData="clueData" |
| | | v-model:show="dialogShow" |
| | | :question="selectedQuestion" |
| | | @on-submit="getQuestion" |
| | |
| | | import { ref, watch, computed } from 'vue'; |
| | | import clueQuestionApi from '@/api/clue/clueQuestionApi'; |
| | | import QuestionDetail from './QuestionDetail.vue'; |
| | | import { |
| | | useMessageBoxTip, |
| | | useMessageBox |
| | | } from '@/composables/messageBox'; |
| | | |
| | | const props = defineProps({ |
| | | clueId: Number |
| | | // clueId: Number, |
| | | clueData: { |
| | | type: Object, |
| | | default: () => { |
| | | return {}; |
| | | } |
| | | } |
| | | }); |
| | | |
| | | // 线索ç»è®º |
| | |
| | | // 䏿¥å¼¹åºæ¡ |
| | | const dialogShow = ref(false); |
| | | const selectedQuestion = ref(); |
| | | const deleteLoading = ref(false); |
| | | |
| | | watch( |
| | | () => props.clueId, |
| | | () => props.clueData, |
| | | () => { |
| | | getQuestion(); |
| | | } |
| | |
| | | selectedQuestion.value = item; |
| | | dialogShow.value = true; |
| | | } |
| | | |
| | | // å é¤é®é¢ |
| | | function deleteQuestion(item) { |
| | | useMessageBoxTip({ |
| | | confirmMsg: '确认æ¯å¦å é¤é®é¢', |
| | | confirmTitle: 'å é¤é®é¢', |
| | | onConfirm: () => { |
| | | return clueQuestionApi |
| | | .deleteQuestion(item.cqId) |
| | | .then((res) => { |
| | | if (res) { |
| | | const index = questionList.value.indexOf(item); |
| | | questionList.value.splice(index, 1); |
| | | } |
| | | }) |
| | | .finally(() => (deleteLoading.value = true)); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | /** |
| | | * è·å线索ç»è®º |
| | | */ |
| | | function getQuestion() { |
| | | clueQuestionApi.getQuestion(props.clueId).then((res) => { |
| | | clueQuestionApi.getQuestion(props.clueData.cid).then((res) => { |
| | | questionList.value = res; |
| | | }); |
| | | } |
| | |
| | | |
| | | const props = defineProps({ |
| | | clueId: Number, |
| | | clueData: { |
| | | type: Object, |
| | | default: () => { |
| | | return {}; |
| | | } |
| | | }, |
| | | show: Boolean, |
| | | question: Object |
| | | question: Object, |
| | | create: { |
| | | type: Boolean, |
| | | default: true |
| | | } |
| | | }); |
| | | |
| | | const emit = defineEmits(['update:show', 'onSubmit', 'onClose']); |
| | |
| | | function submit() { |
| | | const coor = formObj.value.coordinate.split(','); |
| | | const q = { |
| | | cId: parseInt(props.clueId), |
| | | cid: parseInt(props.clueData.cid), |
| | | cqName: formObj.value.cqName, |
| | | cqDescription: formObj.value.cqDescription, |
| | | cqStreet: formObj.value.cqStreet, |
| | |
| | | files.push(f.raw); |
| | | }); |
| | | } |
| | | return uploadQuestion(q, files); |
| | | return props.create ? uploadQuestion(q, files) : updateQuestion(q, ); |
| | | } |
| | | |
| | | function cancel() { |
| | |
| | | }); |
| | | } |
| | | |
| | | function updateQuestion(question, newFiles, deleteFiles) { |
| | | |
| | | } |
| | | |
| | | function parseFormObj(question) { |
| | | question.coordinate = |
| | | question.cqLongitude + ',' + question.cqLatitude; |
| | |
| | | } |
| | | } |
| | | ); |
| | | // watch( |
| | | // () => props.question, |
| | | // (val) => { |
| | | // fileList.value = []; |
| | | // if (val) { |
| | | // formObj.value = parseFormObj(val); |
| | | // } else { |
| | | // formObj.value = {}; |
| | | // } |
| | | // } |
| | | // ); |
| | | |
| | | watch(dialogShow, (val) => { |
| | | emit('update:show', val); |
| | | }); |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | |
| | | </template> |
| | |
| | | '@': fileURLToPath(new URL('./src', import.meta.url)) |
| | | } |
| | | }, |
| | | css: { |
| | | preprocessorOptions: { |
| | | scss: { |
| | | additionalData: `@use "@/styles/index.scss" as *;` |
| | | } |
| | | } |
| | | }, |
| | | server: { |
| | | host: '0.0.0.0' |
| | | } |