diff --git a/.env.base b/.env.base index 1c2bdc8..66bfa5c 100644 --- a/.env.base +++ b/.env.base @@ -1,14 +1,14 @@ # 本地开发环境 -NODE_ENV=development +VITE_NODE_ENV=development VITE_DEV=true # 请求路径 -#VITE_BASE_URL='http://api-dashboard.yudao.iocoder.cn' +#VITE_BASE_URL='http://118.31.23.45:48080' VITE_BASE_URL='http://localhost:48080' - # 上传路径 -VITE_UPLOAD_URL='http://118.31.23.45:48080/admin-api/system/file/upload' +# VITE_UPLOAD_URL='http://118.31.23.45:48080/admin-api/system/file/upload' +VITE_UPLOAD_URL='http://114.55.169.15:48080/admin-api/system/file/upload' # 接口前缀 VITE_API_BASEPATH=/crm-api diff --git a/index.html b/index.html index 533c69b..a622563 100644 --- a/index.html +++ b/index.html @@ -141,7 +141,7 @@ diff --git a/public/favicon.ico b/public/favicon.ico index 5a7de08..b72b5ec 100644 Binary files a/public/favicon.ico and b/public/favicon.ico differ diff --git a/src/api/mall/warehouse/index.js b/src/api/mall/warehouse/index.js index 18ba1b2..6858d62 100644 --- a/src/api/mall/warehouse/index.js +++ b/src/api/mall/warehouse/index.js @@ -38,3 +38,8 @@ export const getInventoryList = async (params) => { export const getInventoryRecord = async (params) => { return await request.get({ url: '/admin-api/crm/erp-inventory-record/page', params }) } + +// 获取剩余库存 +export const getRemainInventoryList = async (params) => { + return await request.get({ url: '/admin-api/crm/erp-inventory-detail/list', params }) +} diff --git a/src/api/school/place/index.js b/src/api/school/place/index.js index 6e61327..0c743e7 100644 --- a/src/api/school/place/index.js +++ b/src/api/school/place/index.js @@ -30,10 +30,10 @@ export const deletePlace = async (id) => { return await request.delete({ url: '/admin-api/crm/sch-place/delete?id=' + id }) } -export const updatePlaceStatus = async (id, status) => { +export const updatePlaceStatus = async (placeId, status) => { const data = { - id, + placeId, status } - return request.put({ url: '/admin-api/crm/sch-place/update-status', data: data }) + return request.put({ url: '/admin-api/crm/sch-place/status/update', data: data }) } diff --git a/src/api/school/sch/index.js b/src/api/school/sch/index.js index 6f82a9e..05e21b7 100644 --- a/src/api/school/sch/index.js +++ b/src/api/school/sch/index.js @@ -24,10 +24,10 @@ export const deleteSchool = async (id) => { return await request.delete({ url: '/admin-api/crm/sch-school/delete?id=' + id }) } -export const updateSchoolStatus = async (id, status) => { +export const updateSchoolStatus = async (schoolId, status) => { const data = { - id, + schoolId, status } - return request.put({ url: '/admin-api/crm/sch-school/update-status', data: data }) + return request.put({ url: '/admin-api/crm/sch-school/status/update', data: data }) } diff --git a/src/components/Echart/src/Echart.vue b/src/components/Echart/src/Echart.vue index 31f2eea..7604765 100644 --- a/src/components/Echart/src/Echart.vue +++ b/src/components/Echart/src/Echart.vue @@ -66,6 +66,7 @@ watch( (options) => { if (echartRef) { echartRef?.setOption(options) + resizeHandler() } }, { diff --git a/src/components/Form/src/Form.vue b/src/components/Form/src/Form.vue index f78267d..d3a00bf 100644 --- a/src/components/Form/src/Form.vue +++ b/src/components/Form/src/Form.vue @@ -233,6 +233,7 @@ export default defineComponent({ vModel={formModel.value[item.field]} {...(autoSetPlaceholder && setTextPlaceholder(item))} {...setComponentProps(item)} + filterable format={item.component == 'DatePicker' ? 'YYYY-MM-DD' : null} value-format={item.component == 'DatePicker' ? 'YYYY-MM-DD' : null} style={baseSty + item.componentProps?.style} diff --git a/src/components/Search/src/Search.vue b/src/components/Search/src/Search.vue index c60109b..084982e 100644 --- a/src/components/Search/src/Search.vue +++ b/src/components/Search/src/Search.vue @@ -59,6 +59,11 @@ const usedSchema = ref([]) const newSchema = computed(() => { let schema: FormSchema[] = cloneDeep(usedSchema.value) + schema.forEach((item: FormSchema) => { + if (item.component == 'TreeSelect') { + item.componentProps['check-strictly'] = true + } + }) if (props.expand && props.expandField && !unref(visible)) { const index = findIndex(schema, (v: FormSchema) => v.field === props.expandField) if (index > -1) { diff --git a/src/components/UploadFile/src/UploadFile.vue b/src/components/UploadFile/src/UploadFile.vue index 66dd51d..a8442d5 100644 --- a/src/components/UploadFile/src/UploadFile.vue +++ b/src/components/UploadFile/src/UploadFile.vue @@ -44,7 +44,8 @@ const props = defineProps({ modelValue: propTypes.oneOfType([String, Array]).isRequired, title: propTypes.string.def('文件上传'), updateUrl: propTypes.string.def(import.meta.env.VITE_UPLOAD_URL), - fileType: propTypes.array.def(['doc', 'xls', 'ppt', 'txt', 'pdf']), // 文件类型, 例如['png', 'jpg', 'jpeg'] + // fileType: propTypes.array.def(['doc', 'xls', 'ppt', 'txt', 'pdf']), // 文件类型, 例如['png', 'jpg', 'jpeg'] + fileType: propTypes.array.def([]), accept: propTypes.string.def('*'), fileSize: propTypes.number.def(5), // 大小限制(MB) limit: propTypes.number.def(5), // 数量限制 diff --git a/src/hooks/web/useWatermark.ts b/src/hooks/web/useWatermark.ts index 4a31359..07cd09c 100644 --- a/src/hooks/web/useWatermark.ts +++ b/src/hooks/web/useWatermark.ts @@ -15,14 +15,14 @@ export function useWatermark(appendEl: HTMLElement | null = document.body) { clear() const can = document.createElement('canvas') - can.width = 300 + can.width = 500 can.height = 240 const cans = can.getContext('2d') if (cans) { cans.rotate((-20 * Math.PI) / 120) cans.font = '15px Vedana' - cans.fillStyle = 'rgba(0, 0, 0, 0.15)' + cans.fillStyle = 'rgba(0, 0, 0, 0.05)' cans.textAlign = 'left' cans.textBaseline = 'middle' cans.fillText(str, can.width / 20, can.height) diff --git a/src/layout/components/Message/src/Message.vue b/src/layout/components/Message/src/Message.vue index 348c47c..f51751f 100644 --- a/src/layout/components/Message/src/Message.vue +++ b/src/layout/components/Message/src/Message.vue @@ -34,9 +34,9 @@ onMounted(() => { // 首次加载小红点 getUnreadCount() // 轮询刷新小红点 - msgInterval.value = setInterval(() => { - getUnreadCount() - }, 1000 * 60 * 2) + // msgInterval.value = setInterval(() => { + // getUnreadCount() + // }, 1000 * 60 * 2) }) onUnmounted(() => { diff --git a/src/layout/components/Setting/src/Setting.vue b/src/layout/components/Setting/src/Setting.vue index bdeb2ca..3420e5a 100644 --- a/src/layout/components/Setting/src/Setting.vue +++ b/src/layout/components/Setting/src/Setting.vue @@ -12,6 +12,11 @@ import { ThemeSwitch } from '@/layout/components/ThemeSwitch' import ColorRadioPicker from './components/ColorRadioPicker.vue' // import InterfaceDisplay from './components/InterfaceDisplay.vue' // import LayoutRadioPicker from './components/LayoutRadioPicker.vue' +import { useWatermark } from '@/hooks/web/useWatermark' + +const { setWatermark } = useWatermark() + +setWatermark('安徽莳松科技有限公司') const { t } = useI18n() const appStore = useAppStore() diff --git a/src/layout/components/Setting/src/components/InterfaceDisplay.vue b/src/layout/components/Setting/src/components/InterfaceDisplay.vue index 598d2c8..b791a85 100644 --- a/src/layout/components/Setting/src/components/InterfaceDisplay.vue +++ b/src/layout/components/Setting/src/components/InterfaceDisplay.vue @@ -124,7 +124,6 @@ const fixedMenuChange = (show: boolean) => { const setWater = () => { setWatermark(water.value) } -setWater() const layout = computed(() => appStore.getLayout) diff --git a/src/views/Basic/GeneralSet/Comp/BSClue.vue b/src/views/Basic/GeneralSet/Comp/BSClue.vue index 8a2b1c5..7ca45c9 100644 --- a/src/views/Basic/GeneralSet/Comp/BSClue.vue +++ b/src/views/Basic/GeneralSet/Comp/BSClue.vue @@ -10,7 +10,7 @@ @@ -195,6 +195,16 @@ function handleClickLib(index) { getResourceList() } +function handleDownload(href) { + if (href) { + let a = document.createElement('a') + a.download = href //指定下载的文件名 + a.href = href // URL对象 + a.click() // 模拟点击 + URL.revokeObjectURL(a.href) // 释放URL 对象 + } +} + function openResource(type, id) { resourceDialog.value.open(type, libraryList.value[libraryIndex.value], id) } diff --git a/src/views/Basic/User/UserForm.vue b/src/views/Basic/User/UserForm.vue index 941d81a..a745737 100644 --- a/src/views/Basic/User/UserForm.vue +++ b/src/views/Basic/User/UserForm.vue @@ -9,8 +9,8 @@ > - - + + @@ -69,8 +69,8 @@ - - + + @@ -142,8 +142,8 @@ const formData = ref({ hireDate: '' }) const formRules = ref({ - username: [{ required: true, message: '用户名称不能为空', trigger: 'blur' }], - nickname: [{ required: true, message: '用户昵称不能为空', trigger: 'blur' }], + username: [{ required: true, message: '登录账号不能为空', trigger: 'blur' }], + nickname: [{ required: true, message: '用户姓名不能为空', trigger: 'blur' }], password: [{ required: true, message: '用户密码不能为空', trigger: 'blur' }], email: [ { @@ -152,13 +152,7 @@ const formRules = ref({ trigger: ['blur', 'change'] } ], - mobile: [ - { - pattern: /^(?:(?:\+|00)86)?1(?:3[\d]|4[5-79]|5[0-35-9]|6[5-7]|7[0-8]|8[\d]|9[189])\d{8}$/, - message: '请输入正确的手机号码', - trigger: 'blur' - } - ] + mobile: [{ required: true, message: '手机号不能为空', trigger: 'blur' }] }) const formRef = ref() // 表单 Ref const deptList = ref([]) // 树形结构 diff --git a/src/views/Basic/User/index.vue b/src/views/Basic/User/index.vue index d04a2e8..7af1f6e 100644 --- a/src/views/Basic/User/index.vue +++ b/src/views/Basic/User/index.vue @@ -7,10 +7,10 @@ - + - - + + diff --git a/src/views/Clue/Order/Comp/Delivery.vue b/src/views/Clue/Order/Comp/Delivery.vue index 868a03f..6b50606 100644 --- a/src/views/Clue/Order/Comp/Delivery.vue +++ b/src/views/Clue/Order/Comp/Delivery.vue @@ -67,25 +67,23 @@ - - - + + + - + + - + + + diff --git a/src/views/Clue/Order/Comp/DialogOrder.vue b/src/views/Clue/Order/Comp/DialogOrder.vue index 309dcb6..2244a25 100644 --- a/src/views/Clue/Order/Comp/DialogOrder.vue +++ b/src/views/Clue/Order/Comp/DialogOrder.vue @@ -7,20 +7,22 @@