首页 > 其他分享 >vue3 之 ArcoPro 后台管理系统

vue3 之 ArcoPro 后台管理系统

时间:2023-12-01 11:55:05浏览次数:42  
标签:vue const 管理系统 true vue3 value ArcoPro props currentData

一、资料链接

  Arco Design 的官网:https://arco.design/

  Arco Design开箱的管理系统预览:https://vue-pro.arco.design/login

  vue3 项目创建的指南:https://arco.design/vue/docs/pro/start

二、基本命令

  开始开发之前,请确认本地环境中安装好了 node, git ,这些肯定具备塞,Arco Design是字节出品的,创建当然需要自己的脚手架

  该项目的技术栈:vue + ES2015(及以上) + TypeScript + Arco Design + echarts等

  ① 安装Arco Design的脚手架命令

npm i -g arco-cli

  ② 创建项目

arco init 项目名

  ③ 选择技术栈(这个按你自己的需要选择,这是选择vue)

? 请选择你希望使用的技术栈
   React
 ❯ Vue

  ④ 选择分类

? 请选择一个分类
   业务组件
   组件库
   Lerna Menorepo 项目
 ❯ Arco Pro 项目

  ⑤ 运行项目

npm run devs 

 三、常用组件

  ① 表单(以下就是自行封装得弹出表单自定义验证规则)

<template>
  <a-modal :visible="visible" title="新增账号" :closable="false">
    <a-form :model="form" :rules="rules" ref="ruleFormRef">
      <a-form-item field="nickName" label="名称" prop="nickName">
        <a-input v-model="form.nickName" />
      </a-form-item>
      <a-form-item field="phoneNumber" label="手机号" prop="phoneNumber">
        <a-input v-model="form.phoneNumber" />
      </a-form-item>
      <a-form-item field="roleVal" label="角色" prop="roleVal">
        <a-select v-model="form.roleVal" placeholder="Please select ..." multiple>
          <a-option value="普通用户">普通用户</a-option>
          <a-option value="管理员">管理员</a-option>
        </a-select>
      </a-form-item>
    </a-form>
    <template #footer>
      <div style="display: flex; justify-content: flex-end">
        <a-button @click="handleCancel">取消</a-button>
        <a-button type="primary" @click="handleBeforeOk" style="margin-left: 14px;">确定</a-button>
      </div>
    </template>
  </a-modal>
</template>

<script setup lang="ts">
import { defineProps, ref } from 'vue';
import { FormInstance, FieldRule } from '@arco-design/web-vue';

// 父传子的数据 const props = defineProps({ visible: { type: Boolean, default: false, }, currentData: { type: Object } }) type formRes = { nickName?: string, phoneNumber?: string role?: string, roleVal?: string } const form = ref<formRes>({ nickName: '', phoneNumber: '', role: '', roleVal: '', });

// 自定义的验证规则 const ruleFormRef = ref<FormInstance | null>(null); const validateNickName = (value: any, callback: any) => { if (!value) { callback('请输入名称'); } else { callback(); } }; const validatePhoneNumber = (value: any, callback: any) => { const pattern = /^1[3-9]\d{9}$/; if (!value) { callback('请输入手机号'); } else if (!pattern.test(value)) { callback('手机号格式不正确'); } else { callback() } }; type TriggerFieldRule<T> = FieldRule<T> & { trigger?: "blur" | "change" | "input"; }; const rules: Record<string, TriggerFieldRule<any>[]> = { nickName: [ { required: true, validator: validateNickName, trigger: 'blur' } ], phoneNumber: [ { required: true, validator: validatePhoneNumber, trigger: 'blur' } ], roleVal: [ { required: true, message: '请选择用户角色', trigger: 'change' } ] }; const emitEvents = defineEmits(['handleBeforeOk', 'handleCancel']) const handleBeforeOk = () => { console.log('点击确定按钮'); ruleFormRef.value?.validate((valid: any) => { if (!valid) { console.log('表单验证通过'); emitEvents('handleBeforeOk', form.value); } else { console.log('表单验证失败'); } }); }; const handleCancel = () => { form.value = {} emitEvents('handleCancel'); }; </script> <style scoped></style>

  ② 抽屉组件(就可用于详情页面的展示)

<template>
  <a-drawer width="34%" :visible="isShow" :closable="false" :hide-cancel="true" @ok="handleCancel">
    <template #title> 账号详情 </template>
    <div>
      <a-form :model="form" :disabled="disabled">
        <a-form-item field="accountId" label="账号ID" disabled>
          <a-input v-model="form.accountId" />
        </a-form-item>
        <a-form-item field="nickName" label="账号名称">
          <a-input v-model="form.nickName" />
        </a-form-item>
        <a-form-item field="phoneNumber" label="手机号">
          <a-input v-model="form.phoneNumber" />
        </a-form-item>
        <a-form-item field="roleVal" label="角色">
          <a-select v-model="form.roleVal" multiple>
            <a-option value="普通用户">普通用户</a-option>
            <a-option value="管理员">管理员</a-option>
          </a-select>
        </a-form-item>
        <a-form-item field="stateVal" label="账号状态">
          <a-select v-model="form.stateVal">
            <a-option value="正常">正常</a-option>
            <a-option value="停用">停用</a-option>
          </a-select>
        </a-form-item>
        <a-form-item field="createdTime" label="创建时间" disabled>
          <a-input v-model="form.createdTime" />
        </a-form-item>
      </a-form>
    </div>
    <template #footer>
      <div style="display: flex; justify-content: flex-end">
        <a-button type="primary" v-if="currentOptions === 'update'" @click="handleUpdateAccount"
          style="margin-right: 14px;">修改</a-button>
        <a-button type="primary" :status="currentData.status === 0 ? 'success' : 'danger'" @click="handleOptions"
          style="margin-right: 14px;">{{ optionsVal
          }}</a-button>
        <a-button type="primary" v-if="currentOptions === 'update'" status="warning" @click="handleUpdateSure"
          style="margin-right: 14px;">确定</a-button>
        <a-button @click="handleCancel">取消</a-button>
      </div>
    </template>
  </a-drawer>
</template>

<script setup lang="ts">
import { ref, shallowRef, defineProps, watch } from 'vue';

const props = defineProps({
  isShow: {
    type: Boolean,
    default: false,
  },
  currentData: {
    type: Object,
    required: true,
  },
  currentOptions: {
    type: String,
  },
});

const form = shallowRef({
  accountId: '',
  nickName: '',
  phoneNumber: '',
  role: '',
  roleVal: '',
  status: 0,
  stateVal: '',
  createdTime: '',
});

const disabled = ref(true);
const optionsVal = ref('作废')

const emitEvents = defineEmits(['handleCancel', 'handleUpdateSure']);

const handleUpdateAccount = () => {
  disabled.value = false
}

const handleOptions = () => {
  optionsVal.value = props.currentData.status === 1 ? '作废' : '启用'
}
handleOptions()

const handleUpdateSure = () => {
  emitEvents('handleUpdateSure')
}

const handleCancel = () => {
  emitEvents('handleCancel');
};

watch(() => [props.currentData, props.currentOptions], () => {
  handleOptions()
  disabled.value = props.currentOptions === 'detail';
  form.value = {
    accountId: props.currentData.accountId || '',
    nickName: props.currentData.nickName || '',
    phoneNumber: props.currentData.phoneNumber || '',
    role: props.currentData.role || '',
    roleVal: props.currentData.roleVal || '',
    status: props.currentData.status || 0,
    stateVal: props.currentData.stateVal || '',
    createdTime: props.currentData.createdTime || '',
  };
},
  {
    immediate: true,
    deep: true
  }
);
</script>

<style scoped></style>

  

 注:该文档为个人理解所写,有误可建议修改(也可留下您宝贵的建议哦~)

 

标签:vue,const,管理系统,true,vue3,value,ArcoPro,props,currentData
From: https://www.cnblogs.com/persistIn/p/17869393.html

相关文章

  • springboot云HIS信息管理系统
    系统功能:为居民建立一份动态、连续、实时、共享的个人电子健康档案,包括家庭和个人信息采集、编辑、常见病诊疗、疾病预防控制服务和健康教育。针对基层医院的业务特点,实现以财务核算为基础,以临床医疗服务为中心的全程信息化管理,主要包括以下业务模块:门诊住院收费管理、以电子病历......
  • el-check省市区选择组件 vue3
    引用组件//city_dialog.vue//PopWindow弹出层组件//AreaList省市区数据组件//areaData省市区数据<PopWindow:dialogVisible="dialogVisible"title="省市区选择"sizeType="large":btnType="2"@closeWin="closeWin"><div......
  • 数字千分比格式化 vue3
    {{numberToCurrencyNo(1245)}}exportconstnumberToCurrencyNo=(value:any)=>{if(!value)return0;//获取整数部分constintPart=Math.trunc(value);//整数部分处理,增加,constintPartFormat=intPart.toString().replace(/(\d)(?=(?:\d{3})+$)/g......
  • 数组对比大小 vue3
    lett_data=sortByKey(pz_data.data,"yield_per_mu");//array:当前数组//key:数组中需要比较大小的值exportconstsortByKey=(array:any,key:any)=>{returnarray.sort(function(a:any,b:any){varx=b[key];vary=a[key];returnx&l......
  • 父组件 同步修改/传值 子组件 vue3
    父组件//引入子组件<jyqk:selectData="selectData"ref="jyqk_ref"></jyqk>importfxjyfrom"./components/fxjy.vue";constjyqk_ref=ref<any>();constchange_data=(val:any)=>{jyqk_ref.value.getData();}......
  • echart 防止多次渲染 无数据时显示暂无数据 vue3
    //基于准备好的dom,初始化echarts实例constbarDOM:any=ref();varmyChart:any;letechartNull:any=null;//渲染echartconstinit_chart=()=>{if(myChart!=null&&myChart!=""&&myChart!=undefined){myChart.dispose();......
  • vue3 标题组件
    <template><divclass="header_body"><divclass="header_inner"><divclass="title_line"></div><el-rowclass="titleBodyComl"><divclass="icon&qu......
  • SSM SpringBoot vue考勤信息管理系统
    SSMSpringBootvue考勤信息管理系统系统功能登录注册个人中心部门信息管理上班时间管理考勤信息管理员工信息管理签到管理请假信息管理加班申请管理出差申请管理开发环境和技术开发语言:Java使用框架:SSM(Spring+SpringMVC+Mybaits)或SpringBoot前端:v......
  • 通过.NET Core+Vue3 实现SignalR即时通讯功能
    .NETCore和Vue3结合使用SignalR可以实现强大的实时通讯功能,允许实时双向通信。在这个示例中,我们将详细说明如何创建一个简单的聊天应用程序,演示如何使用.NETCoreSignalR后端和Vue3前端来实现实时通讯功能。步骤1:准备工作确保你已经安装了以下工具和环境:.NETCore......
  • 第三方实验室LIMS管理系统源码
    LIMS实验室信息管理系统源码LIMS系统的功能根据实验室的规模和任务而有所不同,其系统主要功能包括:系统维护、基础数据编码管理,样品管理、数据管理、报告管理、报表打印、实验材料管理、设备管理等。它可以取代传统的手工管理模式而给检测实验室带来巨大的变化,提高检测实验室的整体......