main
wwl 2024-05-05 21:57:08 +08:00
parent 3734a770dd
commit 21a629b4fb
7 changed files with 2625 additions and 2849 deletions

View File

@ -7,20 +7,20 @@ import router from '@/router'
export const TOKEN_KEY = 'token'
declare module 'axios' {
export interface AxiosRequestConfig {
showLoading?: boolean
// [自定义属性声明]
}
export interface AxiosRequestConfig {
showLoading?: boolean
// [自定义属性声明]
}
}
// const { createMessage, createWarningModal } = useMessage()
// 创建axios实例
const service = axios.create({
// 服务接口请求
baseURL: '/test-api',
// 超时设置
timeout: 15000,
headers: { 'Content-Type': 'application/json;charset=utf-8;' },
showLoading: false
// 服务接口请求
baseURL: '/test-api',
// 超时设置
timeout: 15000,
headers: { 'Content-Type': 'application/json;charset=utf-8;' },
showLoading: false
})
// let loading: any;
@ -31,143 +31,141 @@ const service = axios.create({
let requestCount: number = 0
//显示loading
const showLoading = () => {
if (requestCount === 0) {
//加载中显示样式可以自行修改
// loading = ElLoading.service({
// text: "拼命加载中,请稍后...",
// background: 'rgba(0, 0, 0, 0.7)',
// spinner: 'el-icon-loading',
// })
message.loading('请求中...')
}
requestCount++
if (requestCount === 0) {
//加载中显示样式可以自行修改
// loading = ElLoading.service({
// text: "拼命加载中,请稍后...",
// background: 'rgba(0, 0, 0, 0.7)',
// spinner: 'el-icon-loading',
// })
message.loading('请求中...')
}
requestCount++
}
//隐藏loading
const hideLoading = () => {
requestCount--
if (requestCount == 0) {
// loading.close()
message.destroyAll()
}
requestCount--
if (requestCount == 0) {
// loading.close()
message.destroyAll()
}
}
// 请求拦截
service.interceptors.request.use(
(config) => {
// config.showLoading
if (config.showLoading) {
showLoading()
}
if (token) config.headers[TOKEN_KEY] = unref(token)
// if (getToken()) {
// // 是否需要设置 token放在请求头
// config.headers['token'] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
// }
(config) => {
// config.showLoading
if (config.showLoading) {
showLoading()
}
if (token) config.headers[TOKEN_KEY] = unref(token)
// if (getToken()) {
// // 是否需要设置 token放在请求头
// config.headers['token'] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
// }
// get请求映射params参数
if (config.method === 'get' && config.params) {
let url = config.url + '?'
for (const propName of Object.keys(config.params)) {
const value = config.params[propName]
const part = encodeURIComponent(propName) + '='
if (value !== null && typeof value !== 'undefined') {
// 对象处理
if (typeof value === 'object') {
for (const key of Object.keys(value)) {
const params = propName + '[' + key + ']'
const subPart = encodeURIComponent(params) + '='
url += subPart + encodeURIComponent(value[key]) + '&'
}
} else {
url += part + encodeURIComponent(value) + '&'
}
}
}
url = url.slice(0, -1)
config.params = {}
config.url = url
}
return config
},
(error) => {
// console.log(error)
Promise.reject(error)
}
// get请求映射params参数
if (config.method === 'get' && config.params) {
let url = config.url + '?'
for (const propName of Object.keys(config.params)) {
const value = config.params[propName]
const part = encodeURIComponent(propName) + '='
if (value !== null && typeof value !== 'undefined') {
// 对象处理
if (typeof value === 'object') {
for (const key of Object.keys(value)) {
const params = propName + '[' + key + ']'
const subPart = encodeURIComponent(params) + '='
url += subPart + encodeURIComponent(value[key]) + '&'
}
} else {
url += part + encodeURIComponent(value) + '&'
}
}
}
url = url.slice(0, -1)
config.params = {}
config.url = url
}
return config
},
(error) => {
// console.log(error)
Promise.reject(error)
}
)
// 响应拦截器
service.interceptors.response.use(
async (response: any) => {
// console.log('响应拦截器res', response)
// if (res.config.showLoading) {
// showLoading()
// }
hideLoading()
// 未设置状态码则默认成功状态
async (response: any) => {
// console.log('响应拦截器res', response)
// if (res.config.showLoading) {
// showLoading()
// }
hideLoading()
// 未设置状态码则默认成功状态
const { data, status } = response
if (data instanceof Blob || data instanceof ArrayBuffer) {
return {
data,
code: 200
}
if (response.headers['content-disposition']) {
const fileName = response.headers['content-disposition']
?.split(';')[1]
?.split('=')[1]
} else {
return Promise.reject('没有访问权限')
}
}
const { errCode, code, msg } = data || {}
const errMsg = data?.errMsg || data?.message || msg
// console.log(11, code, errMsg)
const { data, status } = response
if (data instanceof Blob || data instanceof ArrayBuffer) {
return {
data,
code: 200
}
if (response.headers['content-disposition']) {
const fileName = response.headers['content-disposition']?.split(';')[1]?.split('=')[1]
} else {
return Promise.reject('没有访问权限')
}
}
const { errCode, code, msg } = data || {}
const errMsg = data?.errMsg || data?.message || msg
// console.log(11, code, errMsg)
if (code === 2000) {
await router.push('/')
}
if (code === 2000) {
await router.push('/')
}
if (![0, 200].includes(code)) {
// if(errMsg==='用户未登录')
// { message.error(errMsg);}
// else if(errMsg==='密码不正确'){
// message.error(errMsg);
// }
// else if(errMsg==="账户信息查找为空"){
// message.error(errMsg);
// }
// else{ message.error("服务器升级维护中,请稍后重试!")}\
message.error(errMsg)
return Promise.reject(errMsg)
}
if (![0, 200].includes(code)) {
if (errMsg === '用户未登录') return Promise.reject(errMsg)
// { message.error(errMsg);}
// else if(errMsg==='密码不正确'){
// message.error(errMsg);
// }
// else if(errMsg==="账户信息查找为空"){
// message.error(errMsg);
// }
// else{ message.error("服务器升级维护中,请稍后重试!")}\
message.error(errMsg)
return Promise.reject(errMsg)
}
if (/^[4|5].*/.test(code || errCode || status)) {
// console.error('> axios(interceptors.response): ', errMsg);
message.error(errMsg)
// message.error("服务器访问过多,请稍后重试!");
// 处理未登录token过期等 情况
// if (code !== 404 && /^[4].*/.test(code || errCode || status)) {
// await app.fedLogout();
// }
if (/^[4|5].*/.test(code || errCode || status)) {
// console.error('> axios(interceptors.response): ', errMsg);
message.error(errMsg)
// message.error("服务器访问过多,请稍后重试!");
// 处理未登录token过期等 情况
// if (code !== 404 && /^[4].*/.test(code || errCode || status)) {
// await app.fedLogout();
// }
return Promise.reject(data)
}
return data
},
(error) => {
// console.log('err' + error)
hideLoading()
let { message } = error
if (message == 'Network Error') {
message = '后端接口连接异常'
} else if (message.includes('timeout')) {
message = '系统接口请求超时'
} else if (message.includes('Request failed with status code')) {
message = '系统接口' + message.substr(message.length - 3) + '异常'
}
message.err('服务器升级维护中,请稍后重试!')
return Promise.reject(error)
}
return Promise.reject(data)
}
return data
},
(error) => {
// console.log('err' + error)
hideLoading()
let { message } = error
if (message == 'Network Error') {
message = '后端接口连接异常'
} else if (message.includes('timeout')) {
message = '系统接口请求超时'
} else if (message.includes('Request failed with status code')) {
message = '系统接口' + message.substr(message.length - 3) + '异常'
}
message.err('服务器升级维护中,请稍后重试!')
return Promise.reject(error)
}
)
export default service

File diff suppressed because it is too large Load Diff

View File

@ -168,7 +168,7 @@ onMounted(async () => {
addDISH3.value > 0 ? (addDISH3.value = addDISH3.value.toFixed(2)) : 0
}
if (isUpPwds.value) {
ElMessageBox.alert('为了您的帐号安全,首次登录必须更改初始密码', '重要提醒', {
ElMessageBox.alert('为了您的帐号安全,此次登录必须更改密码', '重要提醒', {
confirmButtonText: 'OK',
showClose: false,
showCancelButton: false

View File

@ -13,7 +13,7 @@ const query = ref<any>({
})
const year = new Date().getFullYear()
const month = new Date().getMonth()
const jpMonth = (month < 3 ? year - 1 : year) + ''
const jpMonth = (month < 4 ? year - 1 : year) + ''
query.value.year = jpMonth
const calendar = [4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3]
const calendarShow = new Date().getMonth() + 1
@ -43,8 +43,11 @@ const getCsrSupplier = () => {
try {
csrSupplier.value = resData.length
? resData.map((key) => {
const obj = data[key] || {}
const month = String(key).split('-')?.[1] || ''
const arr = String(key).split('-')
const month = arr?.[1] || ''
// const year = arr?.[0] || ''
const obj =
data[+month < 4 ? +req.year + 1 + '-' + month : req.year + '-' + month] || {}
Object.assign(csrSupplierObj.value[month], obj)
return {
key,
@ -173,19 +176,17 @@ getCsrSupplierTaskInfo()
<el-col :span="8" v-for="(it, i) in months" :key="i">
<div
v-show="!loading"
:class="i <= nowIndexMonth && query.year == jpMonth ? 'times' : 'time'"
:class="csrSupplierObj[it]?.submitedCount !== undefined ? 'times' : 'time'"
@click="handleMonth(i)"
>
<div
v-if="i > nowIndexMonth || query.year != jpMonth"
v-if="csrSupplierObj[it]?.submitedCount === undefined"
class="text-#d3d2d2 text-18px font-bold absolute left-40% top-45%"
>
<span class="text-60px">{{ +it }}</span
>
</div>
<template
v-if="i <= nowIndexMonth && (query.year == jpMonth || !!csrSupplierObj[it])"
>
<template v-if="csrSupplierObj[it]?.submitedCount !== undefined">
<div class="text-#fff text-18px font-bold absolute left-40% top-24px">
<span class="text-24px">{{ +it }}</span
>

File diff suppressed because it is too large Load Diff

View File

@ -1,9 +1,10 @@
<!-- 外部情报 -->
<script setup lang="ts">
// import Vue3Tinymce from '@jsdawn/vue3-tinymce';
import HomeHead from "@/views/home/components/HomeHead.vue";
import HomeHead from '@/views/home/components/HomeHead.vue'
import UserPage from '../../../home/intelligence/process/UserPages.vue'
// import HomeHeadSearch from '@/views/home/components/HomeHeadSearch.vue'
import { useDate } from "@/views/home/hooks/useDate";
import { useDate } from '@/views/home/hooks/useDate'
import {
NModal,
NForm,
@ -14,37 +15,37 @@ import {
NSelect,
NSpace,
NRadioGroup,
useMessage,
useMessage
// FormInst,
} from "naive-ui";
import { saveArticle, trendsDetail } from "@/api/daikin/base";
import Editor from "../components/TinyECE.vue";
import { useUserStore } from "@/stores/modules/user";
import { useRoute } from "vue-router";
const { day, week } = useDate();
const { push } = useRouter();
const store = useUserStore();
let route = useRoute();
let cate = ref(1);
const fileList = ref<[]>();
const editorContent = ref("");
const formRef = ref<any | null>(null);
const message = useMessage();
} from 'naive-ui'
import { saveArticle, trendsDetail } from '@/api/daikin/base'
import Editor from '../components/TinyECE.vue'
import { useUserStore } from '@/stores/modules/user'
import { useRoute } from 'vue-router'
const { day, week } = useDate()
const { push } = useRouter()
const store = useUserStore()
let route = useRoute()
let cate = ref(1)
const fileList = ref<[]>()
const editorContent = ref('')
const formRef = ref<any | null>(null)
const message = useMessage()
const formValue: any = ref({
type: "1",
cate: "1",
title: "",
tag: "",
source: "",
content: "",
reviewSource: "2",
});
type: '1',
cate: '1',
title: '',
tag: '',
source: '',
content: '',
reviewSource: '2'
})
if (route.query.id) {
trendsDetail(route.query.id).then((res) => {
let data = res.data;
console.log(res);
let data = res.data
console.log(res)
formValue.value = {
type: data.type,
cate: data.cate,
@ -52,34 +53,34 @@ if (route.query.id) {
tag: data.tag,
source: data.source,
content: unescapeHTML(data.content),
reviewSource: data.reviewSource,
};
editorContent.value = unescapeHTML(data.content);
reviewSource: data.reviewSource
}
editorContent.value = unescapeHTML(data.content)
if (data.type === 2) {
cate.value = 3;
cate.value = 3
} else {
}
console.log(cate.value, data.cate);
console.log(cate.value, data.cate)
rules = {
title: {
required: false,
message: "请输入标题",
trigger: "blur",
message: '请输入标题',
trigger: 'blur'
},
tag: {
required: true,
message: "请输入标题",
trigger: "blur",
message: '请输入标题',
trigger: 'blur'
},
content: {
required: false,
message: "请输入内容",
trigger: "blur",
},
};
});
message: '请输入内容',
trigger: 'blur'
}
}
})
}
let rules: any = {
// cate: {
@ -89,123 +90,143 @@ let rules: any = {
// },
title: {
required: false,
message: "请输入标题",
trigger: "blur",
message: '请输入标题',
trigger: 'blur'
},
tag: {
required: true,
message: "请输入标题",
trigger: "blur",
message: '请输入标题',
trigger: 'blur'
},
content: {
required: false,
message: "请输入内容",
trigger: "blur",
},
};
message: '请输入内容',
trigger: 'blur'
}
}
function change(i: any) {
// console.log(i)
cate.value = i;
cate.value = i
// console.log(formValue.cate)
formValue.cate = i;
formValue.cate = i
// console.log(formValue.cate)
}
function sure(e: MouseEvent) {
e.preventDefault();
e.preventDefault()
formRef.value?.validate((errors) => {
if (!errors) {
formValue.value.cate = cate.value;
formValue.value.cate = cate.value
if (!formValue.value.type) {
message.success("请选择类型");
return;
message.success('请选择类型')
return
}
// console.log('555555', editorContent.value);
save();
save()
} else {
console.log(errors);
message.error("请输入完整");
console.log(errors)
message.error('请输入完整')
}
});
})
}
function escapeHTML(html: string): string {
const tempElement = document.createElement("div");
tempElement.textContent = html;
return tempElement.innerHTML;
const tempElement = document.createElement('div')
tempElement.textContent = html
return tempElement.innerHTML
}
function unescapeHTML(html: string) {
const doc = new DOMParser().parseFromString(html, "text/html");
return doc.documentElement.textContent;
const doc = new DOMParser().parseFromString(html, 'text/html')
return doc.documentElement.textContent
}
const header = { token: store.user.token };
const header = { token: store.user.token }
// console.log(store.user.token)
const dialogImageUrl = ref("");
const dialogVisible = ref(false);
const dialogImageUrl = ref('')
const dialogVisible = ref(false)
const handleRemove: UploadProps["onRemove"] = (
uploadFile: any,
uploadFiles: any
) => {
const handleRemove: UploadProps['onRemove'] = (uploadFile: any, uploadFiles: any) => {
// console.log(dialogImageUrl,dialogVisible)
};
}
const handlePictureCardPreview: UploadProps["onPreview"] = (uploadFile: {
url: string;
}) => {
dialogImageUrl.value = uploadFile.url!;
dialogVisible.value = true;
const handlePictureCardPreview: UploadProps['onPreview'] = (uploadFile: { url: string }) => {
dialogImageUrl.value = uploadFile.url!
dialogVisible.value = true
// console.log(dialogImageUrl.value)
};
}
async function save() {
const cont = editorContent.value;
const content = escapeHTML(cont);
const reviewSource = 2;
const cont = editorContent.value
const content = escapeHTML(cont)
const reviewSource = 2
// console.log(fileList.value)
let bannerImg;
let bannerImg
if (fileList.value && fileList.value.length > 0) {
bannerImg = fileList.value.map((item) => item.response.url).join("");
bannerImg = fileList.value.map((item) => item.response.url).join('')
} else {
}
console.log(formValue.value);
let userIdList: any[] = []
if (dataList.value?.length > 0) {
dataList.value.forEach((i: { userId: any }) => {
userIdList.push(i.userId)
})
}
const { title, tag, source, cate, type } = formValue.value;
console.log(cate);
const { title, tag, source, cate, type } = formValue.value
console.log(cate)
const { msg, code } = await saveArticle({
title,
tag: "",
tag: '',
reviewSource,
source,
cate: formValue.cate || formValue.value.cate,
type,
content,
bannerImg,
});
userIdList
})
if (code === 200) {
message.success("新增成功");
message.success('新增成功')
// window.location.reload();
history.back();
history.back()
} else {
message.success(msg);
message.success(msg)
}
}
//
const handleChild = (data: string) => {
editorContent.value = data;
};
editorContent.value = data
}
const radios = (e: any) => {
console.log(e.srcElement.value);
if (e.srcElement.value === "1") {
cate.value = 1;
console.log(e.srcElement.value)
if (e.srcElement.value === '1') {
cate.value = 1
} else {
cate.value = 4;
cate.value = 4
}
};
const showModal = ref(false);
}
const showModal = ref(false)
const showModal1 = ref(false)
const setUserList = ref()
const dataList = ref()
const thisClick = () => {
showModal1.value = true
setUserList.value = dataList.value || []
}
const CloseThis = (data: boolean) => {
showModal1.value = data
}
const handleChild1 = (data: any) => {
const { showModal: show, multipleSelection } = data
showModal1.value = unref(show)
dataList.value = unref(multipleSelection)
}
const handleClose = (tag: any) => {
dataList.value.splice(dataList.value.indexOf(tag), 1)
}
</script>
<template>
@ -332,16 +353,33 @@ const showModal = ref(false);
<n-input v-model:value="formValue.source" placeholder="" />
</n-form-item>
<n-form-item label="情报内容" path="content">
<Editor
@getChildData="handleChild"
v-model="formValue.content"
></Editor>
<Editor @getChildData="handleChild" v-model="formValue.content"></Editor>
</n-form-item>
<n-button @click="thisClick"> </n-button>
<div class="mt15px h150px overflow-y-auto">
<el-tag
v-for="i in dataList"
:key="i"
class="mx-1 my5px"
closable
:disable-transitions="false"
@close="handleClose(i)"
type="info"
size="large"
>
{{ i.nickName }}
</el-tag>
</div>
<n-form-item>
<div>
<n-button @click="showModal = true"> 文本内容预览</n-button>
</div>
</n-form-item>
<!-- <n-form-item>
<div>
<el-button type="primary" @click="thisClick"> {{''}}</el-button>
</div>
</n-form-item> -->
</n-form>
<n-button
attr-type="button"
@ -354,12 +392,19 @@ const showModal = ref(false);
</div>
<n-modal v-model:show="showModal">
<div class="flex w80% p30px bg-#fff my40px rounded-30px">
<div
class="overflow-y-auto h800px container"
v-html="editorContent"
></div>
<div class="overflow-y-auto h800px container" v-html="editorContent"></div>
</div>
</n-modal>
<n-modal v-model:show="showModal1">
<!-- <n-card style="width:1100px; height: 800px;" title="调达中心" :bordered="false" size="huge" role="dialog"
aria-modal="true"> -->
<UserPage
:userDataList="setUserList"
@clickChild="handleChild1"
@CloseThis="CloseThis"
></UserPage>
<!-- </n-card> -->
</n-modal>
</template>
<style scoped lang="less">

View File

@ -68,9 +68,17 @@ const num = ['', '第一周', '第二周', '第三周', '第四周', '第五周'
function groupDatesByWeek(dates = [], weekStartDay = 1) {
return dates.reduce((acc: any, item: any) => {
const date = dayjs(item.createTime)
const weekStart = date.startOf('week').add(weekStartDay, 'day').format('MM月DD日')
const weekday = date.day() // 01
//
const mondayDistance = (weekday + 6) % 7
//
const sundayDistance = 7 - mondayDistance - 1
//
const weekStart = date.subtract(mondayDistance, 'day').format('MM月DD日')
const weekEnd = date.add(sundayDistance, 'day').format('MM月DD日')
// const weekStart = date.startOf('week').add(weekStartDay, 'day').format('MMDD')
// const weekEnd = date.endOf('week').add(weekStartDay, 'day').format('MMDD')
item.date = date.format('YYYY-MM-DD')
const weekEnd = date.endOf('week').add(weekStartDay, 'day').format('MM月DD日')
const week = getWeekOfMonth(date)
const month = date.format('MM')
const key = `${+month}${num[week]} ${weekStart} - ${weekEnd} `
@ -132,7 +140,6 @@ const codePath = {
const goModule = (item, type) => {
const { moduleCode, id, cateId } = item
const { modulePath, path } = codePath[moduleCode]
console.log('🚀 ~ file: News.vue:128 ~ modulePath, path:', modulePath, path)
if (modulePath) {
if (type === 'module') {
push(modulePath)