diff --git a/.env.production b/.env.production index 6cb0fb3..90b4ce5 100644 --- a/.env.production +++ b/.env.production @@ -4,14 +4,14 @@ VITE_PUBLIC_PATH = / # 本地开发代理,可以解决跨域及多地址代理 # 如果接口地址匹配到,则会转发到http://localhost:3000,防止本地出现跨域问题 # 可以有多个,注意多个不能换行,否则代理将会失效 -VITE_PROXY = [["/prod-api","http://localhost:9999"],["/prod-upload","http://localhost:9999/system_proxy/system/file/upload"]] +VITE_PROXY = [["/prod-api","http://192.168.3.10:9999"],["/prod-upload","http://192.168.3.10:9999/system_proxy/system/file/upload"]] # 是否删除console.log -VITE_DROP_CONSOLE = true +VITE_DROP_CONSOLE = false # 打包是否输出gz|br文件 # 可选: gzip | brotli | none -# 也可以有多个, 例如 ‘gzip’|'brotli',这样会同时生成 .gz和.br文件 +# 也可以有多个, 例如 ‘gzip’|'brotli',这样会同时生成 .gz和.b r文件 VITE_BUILD_COMPRESS = 'none' # 使用compress时是否删除源文件,默认false diff --git a/build/vite/plugin/styleImport.ts b/build/vite/plugin/styleImport.ts index c4d0d23..7eb334f 100644 --- a/build/vite/plugin/styleImport.ts +++ b/build/vite/plugin/styleImport.ts @@ -8,7 +8,7 @@ */ import styleImport from 'vite-plugin-style-import'; - +import {createStyleImportPlugin} from 'vite-plugin-style-import'; export function configStyleImportPlugin() { const styleImportPlugin = styleImport({ libs: [ @@ -21,6 +21,12 @@ export function configStyleImportPlugin() { resolveStyle: (name) => { return `ant-design-vue/es/${name}/style/index`; } + }, + { // 按需加载vxe-table组件 + libraryName: 'vxe-table', + esModule: true, + resolveComponent: (name) => `vxe-table/es/${name}`, + resolveStyle: (name) => `vxe-table/es/${name}/style.css` } ] }); diff --git a/build/vite/plugin/theme.ts b/build/vite/plugin/theme.ts index 0f24766..46a7f98 100644 --- a/build/vite/plugin/theme.ts +++ b/build/vite/plugin/theme.ts @@ -57,6 +57,7 @@ export function configThemePlugin(isBuild: boolean): Plugin[] { path.resolve(process.cwd(), 'node_modules/ant-design-vue/dist/antd.less'), // path.resolve(process.cwd(), 'node_modules/ant-design-vue/dist/antd.dark.less'), path.resolve(process.cwd(), 'src/assets/styles/index.less'), + path.resolve(process.cwd(), 'node_modules/vxe-table/lib/style.css'), ], // 过滤less(禁止在生产环境客户端控制台调用transform注入的函数处理css) filter: (id) => (isBuild ? !id.endsWith('antd.less') : true), diff --git a/package.json b/package.json index 8455027..1c023bf 100644 --- a/package.json +++ b/package.json @@ -42,13 +42,15 @@ "qrcode": "1.4.4", "qs": "6.10.3", "resize-observer-polyfill": "1.5.1", - "sortablejs": "1.14.0", + "sortablejs": "^1.15.0", "tinymce": "5.9.1", "vditor": "3.8.6", "vue": "3.2.12", "vue-i18n": "9.1.7", "vue-router": "4.0.11", "vue-types": "4.0.3", + "vxe-table": "^4.2.8", + "xe-utils": "^3.5.4", "xlsx": "0.17.2" }, "devDependencies": { diff --git a/src/components/AMap/src/MapDataSettingsModal.vue b/src/components/AMap/src/MapDataSettingsModal.vue index e0eda44..324bc8c 100644 --- a/src/components/AMap/src/MapDataSettingsModal.vue +++ b/src/components/AMap/src/MapDataSettingsModal.vue @@ -1,58 +1,125 @@ - - + + + diff --git a/src/components/AMap/src/map.data.ts b/src/components/AMap/src/map.data.ts index f974c6b..f49b132 100644 --- a/src/components/AMap/src/map.data.ts +++ b/src/components/AMap/src/map.data.ts @@ -232,7 +232,7 @@ export const formMutualTaskSettingColumns: BasicColumn[] = [ } ]; -export const formMapDataSettingsColumns: BasicColumn[] = [ +export const formMapDataSettingsColumns = [ { title: '标记点ID', dataIndex: 'markId' diff --git a/src/main.ts b/src/main.ts index 4cc6698..2cf7a51 100644 --- a/src/main.ts +++ b/src/main.ts @@ -14,12 +14,62 @@ import { setupGlobDirectives } from '/@/directives'; import { setupI18n } from '/@/locales/setupI18n'; import { registerGlobComp } from '/@/components'; +// 引入表格功能相对比较齐全的组件vxeTable +import XEUtils from 'xe-utils'; +// 按需导入 vxeTable +import { + // 核心 + VXETable, + + // 功能模块 + Icon, + Filter, + Menu, + Edit, + Export, + Keyboard, + Validator, + Header, + Footer, + + // 可选组件 + Column, + Colgroup, + Grid, + Toolbar, + Pager, + Checkbox, + CheckboxGroup, + Radio, + RadioGroup, + RadioButton, + Input, + Textarea, + Button, + Modal, + Tooltip, + Form, + FormItem, + FormGather, + Select, + Optgroup, + Option, + Switch, + List, + Pulldown, + + // 表格 + Table +} from 'vxe-table'; +import zhCN from 'vxe-table/lib/locale/lang/zh-CN'; + // 在本地开发中不引入按需? // 在按需引入的本地开发中,浏览器请求的数量将增加 20% 左右。 // 这可能会减慢浏览器的刷新速度。 // 所以都是在本地开发中引入,生产环境中才按需引入 if (import.meta.env.DEV) { import('ant-design-vue/dist/antd.less'); + import('vxe-table/lib/style.css'); } async function bootstrap() { @@ -55,6 +105,52 @@ async function bootstrap() { window._AMapSecurityConfig = { securityJsCode: 'ea9d5e2fb6383665de6c3c7b4e53c289' }; + + // 按需加载的方式默认是不带国际化的,自定义国际化需要自行解析占位符 '{0}',例如: + VXETable.setup({ + size: 'medium', // set default size + i18n: (key, args) => XEUtils.toFormatString(XEUtils.get(zhCN, key), args) + }); + + // 表格功能 + app.use(Header) + .use(Footer) + .use(Icon) + .use(Filter) + .use(Edit) + .use(Menu) + .use(Export) + .use(Keyboard) + .use(Validator) + + // 可选组件 + .use(Column) + .use(Colgroup) + .use(Grid) + .use(Toolbar) + .use(Pager) + .use(Checkbox) + .use(CheckboxGroup) + .use(Radio) + .use(RadioGroup) + .use(RadioButton) + .use(Input) + .use(Textarea) + .use(Button) + .use(Modal) + .use(Tooltip) + .use(Form) + .use(FormItem) + .use(FormGather) + .use(Select) + .use(Optgroup) + .use(Option) + .use(Switch) + .use(List) + .use(Pulldown) + + // 安装表格 + .use(Table); } void bootstrap(); diff --git a/src/views/institution/address/AddressModal.vue b/src/views/common/address/AddressModal.vue similarity index 97% rename from src/views/institution/address/AddressModal.vue rename to src/views/common/address/AddressModal.vue index 01dfafc..482fffd 100644 --- a/src/views/institution/address/AddressModal.vue +++ b/src/views/common/address/AddressModal.vue @@ -15,7 +15,7 @@ * author entfrm开发团队-王翔 */ import { ref, unref } from 'vue'; - import { BasicForm, useForm } from '/@/components/Form/index'; + import { BasicForm, useForm } from '/@/components/Form'; import { addressFormSchema } from './address.data'; import { BasicModal, ModalProps, useModalInner } from '/@/components/Modal'; import { listAddr, addAddr, editAddr, getAddr} from '/@/api/platform/system/controller/address'; diff --git a/src/views/institution/address/address.data.ts b/src/views/common/address/address.data.ts similarity index 100% rename from src/views/institution/address/address.data.ts rename to src/views/common/address/address.data.ts diff --git a/src/views/institution/address/index.vue b/src/views/common/address/index.vue similarity index 100% rename from src/views/institution/address/index.vue rename to src/views/common/address/index.vue diff --git a/src/views/equip/boxcard/BoxCardModal.vue b/src/views/common/boxcard/BoxCardModal.vue similarity index 95% rename from src/views/equip/boxcard/BoxCardModal.vue rename to src/views/common/boxcard/BoxCardModal.vue index bb9e785..00953c9 100644 --- a/src/views/equip/boxcard/BoxCardModal.vue +++ b/src/views/common/boxcard/BoxCardModal.vue @@ -12,7 +12,7 @@ import {ref, computed, unref} from 'vue'; import {BasicModal, useModalInner} from '/@/components/Modal'; import {cardFormSchema} from './boxcard.data'; -import {BasicForm, useForm} from '/@/components/Form/index'; +import {BasicForm, useForm} from '/@/components/Form'; import {set} from '/@/api/platform/system/controller/boxcard'; const isUpdate = ref(true); // 定义emit @@ -54,4 +54,4 @@ async function handleSubmit() { setModalProps({confirmLoading: false}); } } - \ No newline at end of file + diff --git a/src/views/equip/boxcard/boxcard.data.ts b/src/views/common/boxcard/boxcard.data.ts similarity index 100% rename from src/views/equip/boxcard/boxcard.data.ts rename to src/views/common/boxcard/boxcard.data.ts diff --git a/src/views/equip/boxcard/index.vue b/src/views/common/boxcard/index.vue similarity index 100% rename from src/views/equip/boxcard/index.vue rename to src/views/common/boxcard/index.vue diff --git a/src/views/institution/doctor/DoctorModal.vue b/src/views/common/doctor/DoctorModal.vue similarity index 97% rename from src/views/institution/doctor/DoctorModal.vue rename to src/views/common/doctor/DoctorModal.vue index d5b305a..c1989d5 100644 --- a/src/views/institution/doctor/DoctorModal.vue +++ b/src/views/common/doctor/DoctorModal.vue @@ -15,7 +15,7 @@ * author entfrm开发团队-王翔 */ import { ref, unref } from 'vue'; - import { BasicForm, useForm } from '/@/components/Form/index'; + import { BasicForm, useForm } from '/@/components/Form'; import { doctorFormSchema } from './doctor.data'; import {addDoctor, delDoctor,getDoctor,editDoctor} from '/@/api/platform/system/controller/doctor'; import { BasicModal, ModalProps, useModalInner } from '/@/components/Modal'; diff --git a/src/views/institution/doctor/doctor.data.ts b/src/views/common/doctor/doctor.data.ts similarity index 100% rename from src/views/institution/doctor/doctor.data.ts rename to src/views/common/doctor/doctor.data.ts diff --git a/src/views/institution/doctor/index.vue b/src/views/common/doctor/index.vue similarity index 100% rename from src/views/institution/doctor/index.vue rename to src/views/common/doctor/index.vue diff --git a/src/views/institution/hospital/HospitalModal.vue b/src/views/common/hospital/HospitalModal.vue similarity index 97% rename from src/views/institution/hospital/HospitalModal.vue rename to src/views/common/hospital/HospitalModal.vue index b24a919..d8794b3 100644 --- a/src/views/institution/hospital/HospitalModal.vue +++ b/src/views/common/hospital/HospitalModal.vue @@ -15,7 +15,7 @@ * author entfrm开发团队-王翔 */ import { ref, unref } from 'vue'; -import { BasicForm, useForm } from '/@/components/Form/index'; +import { BasicForm, useForm } from '/@/components/Form'; import { hospitalFormSchema } from './hospital.data'; import {addHospital, delHospital,getHospital,editHospital} from '/@/api/platform/system/controller/hospital'; import { BasicModal, ModalProps, useModalInner } from '/@/components/Modal'; diff --git a/src/views/institution/hospital/hospital.data.ts b/src/views/common/hospital/hospital.data.ts similarity index 100% rename from src/views/institution/hospital/hospital.data.ts rename to src/views/common/hospital/hospital.data.ts diff --git a/src/views/institution/hospital/index.vue b/src/views/common/hospital/index.vue similarity index 100% rename from src/views/institution/hospital/index.vue rename to src/views/common/hospital/index.vue diff --git a/src/views/institution/institution/InstitutionModal.vue b/src/views/common/institution/InstitutionModal.vue similarity index 97% rename from src/views/institution/institution/InstitutionModal.vue rename to src/views/common/institution/InstitutionModal.vue index 1ae7617..6f2c08f 100644 --- a/src/views/institution/institution/InstitutionModal.vue +++ b/src/views/common/institution/InstitutionModal.vue @@ -15,7 +15,7 @@ * author entfrm开发团队-王翔 */ import { ref, unref } from 'vue'; -import { BasicForm, useForm } from '/@/components/Form/index'; +import { BasicForm, useForm } from '/@/components/Form'; import { institutionFormSchema } from './institution.data'; import {addInstitution, delInstitution,getInstitution,editInstitution} from '/@/api/platform/system/controller/institution'; import { BasicModal, ModalProps, useModalInner } from '/@/components/Modal'; diff --git a/src/views/institution/institution/index.vue b/src/views/common/institution/index.vue similarity index 100% rename from src/views/institution/institution/index.vue rename to src/views/common/institution/index.vue diff --git a/src/views/institution/institution/institution.data.ts b/src/views/common/institution/institution.data.ts similarity index 100% rename from src/views/institution/institution/institution.data.ts rename to src/views/common/institution/institution.data.ts diff --git a/src/views/institution/office/OfficeModal.vue b/src/views/common/office/OfficeModal.vue similarity index 97% rename from src/views/institution/office/OfficeModal.vue rename to src/views/common/office/OfficeModal.vue index 32c6d2c..2f136d0 100644 --- a/src/views/institution/office/OfficeModal.vue +++ b/src/views/common/office/OfficeModal.vue @@ -15,7 +15,7 @@ * author entfrm开发团队-王翔 */ import { ref, unref } from 'vue'; -import { BasicForm, useForm } from '/@/components/Form/index'; +import { BasicForm, useForm } from '/@/components/Form'; import { officeFormSchema } from './office.data'; import {addOffice, delOffice,getOffice,editOffice} from '/@/api/platform/system/controller/office'; import { BasicModal, ModalProps, useModalInner } from '/@/components/Modal'; diff --git a/src/views/institution/office/index.vue b/src/views/common/office/index.vue similarity index 100% rename from src/views/institution/office/index.vue rename to src/views/common/office/index.vue diff --git a/src/views/institution/office/office.data.ts b/src/views/common/office/office.data.ts similarity index 100% rename from src/views/institution/office/office.data.ts rename to src/views/common/office/office.data.ts diff --git a/src/views/institution/report/ReportModal.vue b/src/views/common/report/ReportModal.vue similarity index 97% rename from src/views/institution/report/ReportModal.vue rename to src/views/common/report/ReportModal.vue index 7eed8f2..7a6882b 100644 --- a/src/views/institution/report/ReportModal.vue +++ b/src/views/common/report/ReportModal.vue @@ -15,7 +15,7 @@ * author entfrm开发团队-王翔 */ import { ref, unref } from 'vue'; -import { BasicForm, useForm } from '/@/components/Form/index'; +import { BasicForm, useForm } from '/@/components/Form'; import { doctorFormSchema } from './report.data'; import {addReport, delReport,getReport,editReport} from '/@/api/platform/system/controller/report'; import { BasicModal, ModalProps, useModalInner } from '/@/components/Modal'; diff --git a/src/views/institution/report/index.vue b/src/views/common/report/index.vue similarity index 100% rename from src/views/institution/report/index.vue rename to src/views/common/report/index.vue diff --git a/src/views/institution/report/report.data.ts b/src/views/common/report/report.data.ts similarity index 100% rename from src/views/institution/report/report.data.ts rename to src/views/common/report/report.data.ts diff --git a/src/views/system/area/AreaModal.vue b/src/views/system/area/AreaModal.vue deleted file mode 100644 index 0a7a2b2..0000000 --- a/src/views/system/area/AreaModal.vue +++ /dev/null @@ -1,88 +0,0 @@ - - diff --git a/src/views/system/area/area.data.ts b/src/views/system/area/area.data.ts deleted file mode 100644 index 7332c61..0000000 --- a/src/views/system/area/area.data.ts +++ /dev/null @@ -1,191 +0,0 @@ -/** - * @program: kicc-ui - * @description: 区域模块动态渲染配置 - * @author: entfrm开发团队-王翔 - * @create: 2022/4/21 - */ - -import { BasicColumn } from '/@/components/Table'; -import { FormSchema } from '/@/components/Table'; -import { h } from 'vue'; -import { Tag } from 'ant-design-vue'; - -/** 表格列配置 */ -export const columns: BasicColumn[] = [ - { - title: '区域名称', - dataIndex: 'name', - align: 'left' - }, - { - title: '区域编码', - dataIndex: 'code' - }, - { - title: '排序', - dataIndex: 'sort' - }, - { - title: '状态', - dataIndex: 'status', - width: 80, - customRender: ({record}) => { - const status = record.status; - // 采用二进制~~取反,只要为null或者0等等一些其他的空元素都会转为0 - // 第一次取反会运算为-1,在后一次取反会运算为0 - const enable = ~~status === 0; - const color = enable ? 'green' : 'red'; - const text = enable ? '正常' : '停用'; - return h(Tag, { color: color }, () => text); - } - }, - { - title: '创建时间', - dataIndex: 'createTime' - } -]; - -/** 搜索表单配置 */ -export const searchFormSchema: FormSchema[] = [ - { - field: 'name', - label: '区域名称', - component: 'Input', - componentProps: { - placeholder: '请输入区域名称' - }, - colProps: {span: 8} - }, - { - field: 'status', - label: '状态', - component: 'Select', - componentProps: { - options: [ - { label: '正常', value: '0' }, - { label: '停用', value: '1' } - ] - }, - colProps: { span: 7 } - }, - { - field: 'dateRange', - label: '创建时间', - component: 'RangePicker', - componentProps: { - style: { width:'100%' }, - valueFormat: 'YYYY-MM-DD', - placeholder: ['开始日期','结束日期'] - }, - colProps: { span: 8 } - } -]; - -/** 表单配置 */ -export const formSchema: FormSchema[] = [ - { - field: 'areaId', - label: 'ID', - component: 'Input', - show: false - }, - { - field: 'parentId', - label: '上级区域', - component: 'TreeSelect', - defaultValue: '0', - componentProps: { - replaceFields: { - title: 'name', - key: 'areaId', - value: 'areaId', - }, - getPopupContainer: () => document.body, - } - }, - { - field: 'name', - label: '区域名称', - component: 'Input', - required: true, - colProps: { - span: 12 - } - }, - { - field: 'code', - label: '区域代码', - component: 'Input', - required: true, - colProps: { - span: 12 - } - }, - { - field: 'contacts', - label: '联系人', - component: 'Input', - colProps: { - span: 12 - } - }, - { - field: 'phone', - label: '联系人电话', - component: 'Input', - rules: [ - { - pattern: new RegExp('^1[3|4|5|6|7|8|9][0-9]\\d{8}$'), - message: '请输入正确的手机号码!', - validateTrigger: 'change' - } - ], - colProps: { - span: 12 - } - }, - { - field: 'sort', - label: '区域排序', - component: 'InputNumber', - componentProps: { - style: { width:'100%' }, - min: 0 - }, - required: true, - colProps: { - span: 12 - } - }, - { - field: 'email', - label: '邮箱', - component: 'Input', - rules: [ - { - type: 'email', - message: '请输入正确的邮箱地址!', - validateTrigger: 'change' - } - ], - colProps: { - span: 12 - } - }, - { - field: 'status', - label: '状态', - component: 'RadioGroup', - defaultValue: '0', - componentProps: { - options: [ - { label: '正常', value: '0' }, - { label: '停用', value: '1' } - ] - }, - required: true, - colProps: { - span: 12 - } - } -]; diff --git a/src/views/system/area/index.vue b/src/views/system/area/index.vue deleted file mode 100644 index a65f8ea..0000000 --- a/src/views/system/area/index.vue +++ /dev/null @@ -1,112 +0,0 @@ - - diff --git a/yarn.lock b/yarn.lock index 395a85c..379dcdd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7726,10 +7726,10 @@ sort-keys@^2.0.0: dependencies: is-plain-obj "^1.0.0" -sortablejs@1.14.0: - version "1.14.0" - resolved "https://registry.npmmirror.com/sortablejs/-/sortablejs-1.14.0.tgz#6d2e17ccbdb25f464734df621d4f35d4ab35b3d8" - integrity sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w== +sortablejs@^1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/sortablejs/-/sortablejs-1.15.0.tgz#53230b8aa3502bb77a29e2005808ffdb4a5f7e2a" + integrity sha512-bv9qgVMjUMf89wAvM6AxVvS/4MX3sPeN0+agqShejLU5z5GX4C75ow1O2e5k4L6XItUyAK3gH6AxSbXrOM5e8w== source-map-js@^0.6.2: version "0.6.2" @@ -8987,6 +8987,11 @@ vue@3.2.12: "@vue/runtime-dom" "3.2.12" "@vue/shared" "3.2.12" +vxe-table@^4.2.8: + version "4.2.8" + resolved "https://registry.yarnpkg.com/vxe-table/-/vxe-table-4.2.8.tgz#4cc591d2abee43a4c4cef7c4a5a3dbaaa6a8439c" + integrity sha512-t0IwE0XHZ+FKrE0x3daqm48OJprXEzDFfZWaqX64W/32n4LcCjywL9cMtL0WwplL3IHpDoe9JfKOp9d+jYwrUA== + w3c-hr-time@^1.0.2: version "1.0.2" resolved "https://registry.npmmirror.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" @@ -9327,6 +9332,11 @@ ws@^7.4.6: resolved "https://registry.npmmirror.com/ws/-/ws-7.5.7.tgz#9e0ac77ee50af70d58326ecff7e85eb3fa375e67" integrity sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A== +xe-utils@^3.5.4: + version "3.5.4" + resolved "https://registry.yarnpkg.com/xe-utils/-/xe-utils-3.5.4.tgz#d4335633fede280c68c1c0c9a4c8f3a533cfd831" + integrity sha512-oH7VOgvHv34pn198dhKPVKnuEHV22Q06YpCTVnAS3JuutylmZj/rtJGvn0BxxWQ37w2LgCknoebLA4uIGXwFtw== + xlsx@0.17.2: version "0.17.2" resolved "https://registry.npmmirror.com/xlsx/-/xlsx-0.17.2.tgz#032bcca02ca01b5ebf7da93dcb035891f2c092af"