diff --git a/public/login_lindidiaocha/account.png b/public/login_lindidiaocha/account.png new file mode 100644 index 00000000..a8a6ff4f Binary files /dev/null and b/public/login_lindidiaocha/account.png differ diff --git a/public/login_lindidiaocha/bg.png b/public/login_lindidiaocha/bg.png new file mode 100644 index 00000000..09897064 Binary files /dev/null and b/public/login_lindidiaocha/bg.png differ diff --git a/public/login_lindidiaocha/download.png b/public/login_lindidiaocha/download.png new file mode 100644 index 00000000..68e527e5 Binary files /dev/null and b/public/login_lindidiaocha/download.png differ diff --git a/public/login_lindidiaocha/logo.png b/public/login_lindidiaocha/logo.png new file mode 100644 index 00000000..ee5ee6e9 Binary files /dev/null and b/public/login_lindidiaocha/logo.png differ diff --git a/public/login_lindidiaocha/password.png b/public/login_lindidiaocha/password.png new file mode 100644 index 00000000..7925e5b4 Binary files /dev/null and b/public/login_lindidiaocha/password.png differ diff --git a/public/login_lindidiaocha/register.png b/public/login_lindidiaocha/register.png new file mode 100644 index 00000000..4175d790 Binary files /dev/null and b/public/login_lindidiaocha/register.png differ diff --git a/src/api/sys/cloud.ts b/src/api/sys/cloud.ts new file mode 100644 index 00000000..5cb475e8 --- /dev/null +++ b/src/api/sys/cloud.ts @@ -0,0 +1,42 @@ +import { defHttp } from '@/utils/http/axios'; +enum Api{ + getLeftTree = '/api/SysDataItemDetail/Load', + addLeftItem = '/api/SysDataItemDetail/Add', + delLeftItem = '/api/SysDataItemDetail/Delete', + editLeftItem = '/api/SysDataItemDetail/Update', + LoadPage = '/api/DroneCloudQueryContent/LoadPage', + Get = '/api/DroneCloudQueryContent/Get', + Add = '/api/DroneCloudQueryContent/Add', + Update = '/api/DroneCloudQueryContent/Update', + Delete = '/api/DroneCloudQueryContent/Delete', +} + +// 分类 +export function getLeftTree(params) { + return defHttp.get({ url: Api.getLeftTree, params }); +} + +export function addLeftItem(params){ + return defHttp.post({ url: Api.addLeftItem + '?code=' + params.itemCode, params }); +} + +export function delLeftItem(params){ + return defHttp.post({ url: Api.delLeftItem + '?id=' + params.id }); +} + +// 云查询管理 +export function LoadPage(params) { + return defHttp.get({ url: Api.LoadPage, params }); +} +export function Get(params) { + return defHttp.get({ url: Api.Get, params }); +} +export function Add(params) { + return defHttp.post({ url: Api.Add, params }); +} +export function Update(params) { + return defHttp.post({ url: Api.Update, params }); +} +export function Delete(params) { + return defHttp.post({ url: Api.Delete + '?id=' + params.id , params }); +} \ No newline at end of file diff --git a/src/router/routes/index.ts b/src/router/routes/index.ts index cc088241..5048972b 100644 --- a/src/router/routes/index.ts +++ b/src/router/routes/index.ts @@ -36,7 +36,8 @@ export const RootRoute: AppRouteRecordRaw = { export const LoginRoute: AppRouteRecordRaw = { path: '/login', name: 'Login', - component: () => import('@/views/sys/login/Login.vue'), + // component: () => import('@/views/sys/login/Login.vue'), + component: () => import('@/views/sys/login_lindidiaocha/Login.vue'), meta: { title: t('routes.basic.login'), }, diff --git a/src/views/demo/system/cloudManagement/cloudQueryManagement/Modal/index.vue b/src/views/demo/system/cloudManagement/cloudQueryManagement/Modal/index.vue new file mode 100644 index 00000000..30940bd6 --- /dev/null +++ b/src/views/demo/system/cloudManagement/cloudQueryManagement/Modal/index.vue @@ -0,0 +1,137 @@ + + + + diff --git a/src/views/demo/system/cloudManagement/cloudQueryManagement/index.vue b/src/views/demo/system/cloudManagement/cloudQueryManagement/index.vue new file mode 100644 index 00000000..b47cff3c --- /dev/null +++ b/src/views/demo/system/cloudManagement/cloudQueryManagement/index.vue @@ -0,0 +1,360 @@ + + + + + + diff --git a/src/views/demo/system/cloudManagement/cloudQueryManagement/util.ts b/src/views/demo/system/cloudManagement/cloudQueryManagement/util.ts new file mode 100644 index 00000000..8160064b --- /dev/null +++ b/src/views/demo/system/cloudManagement/cloudQueryManagement/util.ts @@ -0,0 +1,86 @@ +export const columns = [ + { + title: 'ID', + dataIndex: 'id', + resizable: true, + ifShow: false, + }, + { + title: '名称', + dataIndex: 'name', + resizable: true, + width: 100, + }, + { + title: '图层', + dataIndex: 'layer', + resizable: true, + width: 100, + }, + { + title: '数据表', + dataIndex: 'tableName', + resizable: true, + width: 100, + }, + { + title: '叠加图层', + dataIndex: 'overlayList', + resizable: true, + width: 100, + }, + { + title: '是否分类', + dataIndex: 'isClass', + resizable: true, + width: 100, + }, + { + title: '分类字段', + dataIndex: 'classField', + resizable: true, + width: 100, + }, + { + title: '分类名称', + dataIndex: 'className', + resizable: true, + width: 100, + }, + { + title: '选择面积计算字段', + dataIndex: 'areaField', + resizable: true, + width: 100, + }, + { + title: '是否合计', + dataIndex: 'isSum', + resizable: true, + width: 100, + } +]; +export const emptyLeftItem = { + itemName: '', + itemValue: '', +}; +export const emptyRightItem = { + id: '', + name: '', + layer: '', + tableName: '', + overlayList: ['1'], + isClass: 0, + classField: '', + className: '', + areaField:'', + isSum: 0, +}; +export const searchFormSchema = [ + { + field: 'key', + label: '关键字', + component: 'Input', + colProps: { span: 8 }, + }, +]; diff --git a/src/views/demo/system/cloudManagement/imageRelease/index.vue b/src/views/demo/system/cloudManagement/imageRelease/index.vue new file mode 100644 index 00000000..7d84be57 --- /dev/null +++ b/src/views/demo/system/cloudManagement/imageRelease/index.vue @@ -0,0 +1,405 @@ + + + diff --git a/src/views/demo/system/cloudManagement/imageRelease/util.ts b/src/views/demo/system/cloudManagement/imageRelease/util.ts new file mode 100644 index 00000000..308cf8a0 --- /dev/null +++ b/src/views/demo/system/cloudManagement/imageRelease/util.ts @@ -0,0 +1,43 @@ +import dayjs from 'dayjs'; + +export const columns = [ + { + title: 'ID', + dataIndex: 'id', + resizable: true, + ifShow: false, + }, + { + title: '时间', + dataIndex: 'time', + resizable: true, + width: 100, + }, + { + title: '名称', + dataIndex: 'name', + resizable: true, + width: 100, + }, + { + title: '地址', + dataIndex: 'geoserver', + resizable: true, + width: 100, + }, +]; + +export const searchFormSchema = [ + { + field: '[startTime, endTime]', + label: '日期范围', + component: 'RangePicker', + colProps: { span: 8 }, + componentProps: { + format: 'YYYY-MM', + picker: 'month', + placeholder: ['开始日期', '结束日期'], + defaultValue: [dayjs(dayjs(), 'YYYY-MM-DD'), dayjs(dayjs(), 'YYYY-MM-DD')] + }, + }, +]; \ No newline at end of file diff --git a/src/views/sys/login_lindidiaocha/ForgetPasswordForm.vue b/src/views/sys/login_lindidiaocha/ForgetPasswordForm.vue new file mode 100644 index 00000000..70a8cf1b --- /dev/null +++ b/src/views/sys/login_lindidiaocha/ForgetPasswordForm.vue @@ -0,0 +1,79 @@ + + + diff --git a/src/views/sys/login_lindidiaocha/Login.vue b/src/views/sys/login_lindidiaocha/Login.vue new file mode 100644 index 00000000..5e8c3d07 --- /dev/null +++ b/src/views/sys/login_lindidiaocha/Login.vue @@ -0,0 +1,155 @@ + + + diff --git a/src/views/sys/login_lindidiaocha/LoginForm.vue b/src/views/sys/login_lindidiaocha/LoginForm.vue new file mode 100644 index 00000000..c6d6e982 --- /dev/null +++ b/src/views/sys/login_lindidiaocha/LoginForm.vue @@ -0,0 +1,203 @@ + + + diff --git a/src/views/sys/login_lindidiaocha/LoginFormTitle.vue b/src/views/sys/login_lindidiaocha/LoginFormTitle.vue new file mode 100644 index 00000000..3e4c9c4f --- /dev/null +++ b/src/views/sys/login_lindidiaocha/LoginFormTitle.vue @@ -0,0 +1,39 @@ + + + diff --git a/src/views/sys/login_lindidiaocha/MobileForm.vue b/src/views/sys/login_lindidiaocha/MobileForm.vue new file mode 100644 index 00000000..26169f81 --- /dev/null +++ b/src/views/sys/login_lindidiaocha/MobileForm.vue @@ -0,0 +1,63 @@ + + diff --git a/src/views/sys/login_lindidiaocha/QrCodeForm.vue b/src/views/sys/login_lindidiaocha/QrCodeForm.vue new file mode 100644 index 00000000..f27a73df --- /dev/null +++ b/src/views/sys/login_lindidiaocha/QrCodeForm.vue @@ -0,0 +1,31 @@ + + diff --git a/src/views/sys/login_lindidiaocha/RegisterForm.vue b/src/views/sys/login_lindidiaocha/RegisterForm.vue new file mode 100644 index 00000000..e5af1ee7 --- /dev/null +++ b/src/views/sys/login_lindidiaocha/RegisterForm.vue @@ -0,0 +1,112 @@ + + + diff --git a/src/views/sys/login_lindidiaocha/SessionTimeoutLogin.vue b/src/views/sys/login_lindidiaocha/SessionTimeoutLogin.vue new file mode 100644 index 00000000..692ba650 --- /dev/null +++ b/src/views/sys/login_lindidiaocha/SessionTimeoutLogin.vue @@ -0,0 +1,54 @@ + + + diff --git a/src/views/sys/login_lindidiaocha/useLogin.ts b/src/views/sys/login_lindidiaocha/useLogin.ts new file mode 100644 index 00000000..ccaa2fb6 --- /dev/null +++ b/src/views/sys/login_lindidiaocha/useLogin.ts @@ -0,0 +1,130 @@ +import type { FormInstance } from 'ant-design-vue/lib/form/Form'; +import type { + RuleObject, + NamePath, + Rule as ValidationRule, +} from 'ant-design-vue/lib/form/interface'; +import { ref, computed, unref, Ref } from 'vue'; +import { useI18n } from '@/hooks/web/useI18n'; + +export enum LoginStateEnum { + LOGIN, + REGISTER, + RESET_PASSWORD, + MOBILE, + QR_CODE, +} + +const currentState = ref(LoginStateEnum.LOGIN); + +// 这里也可以优化 +// import { createGlobalState } from '@vueuse/core' + +export function useLoginState() { + function setLoginState(state: LoginStateEnum) { + currentState.value = state; + } + + const getLoginState = computed(() => currentState.value); + + function handleBackLogin() { + setLoginState(LoginStateEnum.LOGIN); + } + + return { setLoginState, getLoginState, handleBackLogin }; +} + +export function useFormValid(formRef: Ref) { + const validate = computed(() => { + const form = unref(formRef); + return form?.validate ?? ((_nameList?: NamePath) => Promise.resolve()); + }); + + async function validForm() { + const form = unref(formRef); + if (!form) return; + const data = await form.validate(); + return data as T; + } + + return { validate, validForm }; +} + +export function useFormRules(formData?: Recordable) { + const { t } = useI18n(); + + const getAccountFormRule = computed(() => createRule(t('sys.login.accountPlaceholder'))); + const getPasswordFormRule = computed(() => createRule(t('sys.login.passwordPlaceholder'))); + const getSmsFormRule = computed(() => createRule(t('sys.login.smsPlaceholder'))); + const getMobileFormRule = computed(() => createRule(t('sys.login.mobilePlaceholder'))); + + const validatePolicy = async (_: RuleObject, value: boolean) => { + return !value ? Promise.reject(t('sys.login.policyPlaceholder')) : Promise.resolve(); + }; + + const validateConfirmPassword = (password: string) => { + return async (_: RuleObject, value: string) => { + if (!value) { + return Promise.reject(t('sys.login.passwordPlaceholder')); + } + if (value !== password) { + return Promise.reject(t('sys.login.diffPwd')); + } + return Promise.resolve(); + }; + }; + + const getFormRules = computed((): { [k: string]: ValidationRule | ValidationRule[] } => { + const accountFormRule = unref(getAccountFormRule); + const passwordFormRule = unref(getPasswordFormRule); + const smsFormRule = unref(getSmsFormRule); + const mobileFormRule = unref(getMobileFormRule); + + const mobileRule = { + sms: smsFormRule, + mobile: mobileFormRule, + }; + switch (unref(currentState)) { + // register form rules + case LoginStateEnum.REGISTER: + return { + account: accountFormRule, + password: passwordFormRule, + confirmPassword: [ + { validator: validateConfirmPassword(formData?.password), trigger: 'change' }, + ], + policy: [{ validator: validatePolicy, trigger: 'change' }], + ...mobileRule, + }; + + // reset password form rules + case LoginStateEnum.RESET_PASSWORD: + return { + account: accountFormRule, + ...mobileRule, + }; + + // mobile form rules + case LoginStateEnum.MOBILE: + return mobileRule; + + // login form rules + default: + return { + account: accountFormRule, + password: passwordFormRule, + }; + } + }); + return { getFormRules }; +} + +function createRule(message: string): ValidationRule[] { + return [ + { + required: true, + message, + trigger: 'change', + }, + ]; +}