最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue Element前端應(yīng)用開發(fā)之用戶管理模塊的處理

 更新時(shí)間:2021年05月13日 11:16:48   作者:伍華聰  
本篇隨筆以權(quán)限管理模塊中的用戶管理為媒介,進(jìn)行相關(guān)功能的介紹和界面設(shè)計(jì)的處理。

1、權(quán)限管理模塊的設(shè)計(jì)

我們知道,權(quán)限管理一般都會(huì)涉及到用戶、組織機(jī)構(gòu)、角色,以及權(quán)限功能等方面的內(nèi)容,ABP框架的基礎(chǔ)內(nèi)容也是涉及到這幾方面的內(nèi)容,其中它們之間的關(guān)系基本上是多對多的關(guān)系,它們的關(guān)系如下所示。

權(quán)限模塊里面包含的一些主對象表和中間表,中間表主要用來存儲(chǔ)兩個(gè)對象之間的多對多關(guān)系,如角色包含多個(gè)用戶,用戶屬于多個(gè)機(jī)構(gòu),機(jī)構(gòu)包含多個(gè)角色等等。

結(jié)合ABP后端提供的接口,Vue前端我們要實(shí)現(xiàn)基礎(chǔ)的用戶、組織機(jī)構(gòu)、角色、功能權(quán)限等內(nèi)容的管理,以及維護(hù)它們之間的關(guān)系。Vue前端對于權(quán)限管理模塊的菜單列表如下所示。

上圖權(quán)限管理模塊中,包括用戶管理、機(jī)構(gòu)管理、角色管理、菜單管理、功能管理、審計(jì)日志、登錄日志等內(nèi)容模塊的管理。

其中用戶管理模塊,主要用來展示用戶信息列表,以及查看對應(yīng)用戶權(quán)限、維護(hù)密碼等處理。

用戶列表界面如下所示,包括對應(yīng)條件的查詢和列表展示、以及查看、添加、編輯、刪除、重置密碼等功能入口。

用戶信息查看界面如下所示

主要展示用戶基礎(chǔ)信息,和所屬的關(guān)系信息,其中權(quán)限部分列出對應(yīng)用戶包含的功能點(diǎn),用于界面按鈕等方面的控制處理。

用戶添加界面,則主要用來處理錄入用戶基礎(chǔ)信息部分即可,如下界面所示。

用戶信息錄入,對用戶基礎(chǔ)表單數(shù)據(jù)進(jìn)行校驗(yàn),符合格式要求才能錄入。

用戶編輯界面,基本上和上面的類似了,不在贅述。

另外,刪除用戶或者重置密碼,一般需對確認(rèn)后再行操作,彈出一個(gè)對話框用戶確認(rèn)再繼續(xù)。

2、用戶管理界面功能

以上我們介紹了權(quán)限管理模塊涉及的內(nèi)容和關(guān)系,并著重介紹了用戶管理界面中的內(nèi)容展示,下面介紹在Element中如何實(shí)現(xiàn)對上面界面的處理的。

首先我們需要根據(jù)ABP后端的接口進(jìn)行前端JS端的類的封裝處理,其中前面說過,常規(guī)的Get/GetAll/Create/Update/Delete/Count等接口,我們放在BaseApi基類里面定義,其他子類繼承它即可。

權(quán)限模塊我們涉及到的用戶管理、機(jī)構(gòu)管理、角色管理、菜單管理、功能管理、審計(jì)日志、登錄日志等業(yè)務(wù)類,那么這些類繼承BaseApi,就會(huì)具有相關(guān)的接口了,如下所示繼承關(guān)系。

我們這里以UserAPI的JS類定義介紹,如下所示。

我們以其中一個(gè)接口為例進(jìn)行介紹實(shí)現(xiàn)代碼,可以看到主要就是簡單封裝的調(diào)用即可。

GetGrantedFunctionsByUser(id) { // 獲取用戶權(quán)限列表
    return request({
      url: this.baseurl + 'GetGrantedFunctionsByUser',
      method: 'get',
      params: { id }
    })
  }

有了這些業(yè)務(wù)類的準(zhǔn)備,那么我們和后端ABP的API接口對接,就很容易了,如下圖所示。

剩下的就是對Vue + Element前端的界面處理事情了。

我們先來看看查詢的處理,常規(guī)的查詢涉及日期區(qū)間的查詢處理,這里我們用一個(gè)一個(gè)查詢?nèi)掌诘奶幚聿僮?,如下圖所示。

表單的界面代碼如下所示

<el-form ref="searchForm" :model="searchForm" label-width="80" :inline="true">
      <el-form-item label="創(chuàng)建時(shí)間">
        <el-date-picker
          v-model="searchForm.creationTime"
          type="daterange"
          align="right"
          unlink-panels
          range-separator="至"
          start-placeholder="開始日期"
          end-placeholder="結(jié)束日期"
          :picker-options="pickerOptions"
        />
      </el-form-item>
      <el-form-item label="用戶名" prop="UserName">
        <el-input v-model="searchForm.UserName" />
      </el-form-item>
      <el-form-item label="手機(jī)" prop="PhoneNumber">
        <el-input v-model="searchForm.PhoneNumber" />
      </el-form-item>
    </el-form>

其中定義了一個(gè)pickerOptions 屬性,用于快速選擇日期的,在data里面增加一個(gè)這樣的屬性即可。

pickerOptions: {
        shortcuts: [{
          text: '最近一周',
          onClick(picker) {
            const end = new Date();
            const start = new Date();
            start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
            picker.$emit('pick', [start, end]);
          }
        }, {
          text: '最近一個(gè)月',
          onClick(picker) {
            const end = new Date();
            const start = new Date();
            start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
            picker.$emit('pick', [start, end]);
          }
        }, {
          text: '最近三個(gè)月',
          onClick(picker) {
            const end = new Date();
            const start = new Date();
            start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
            picker.$emit('pick', [start, end]);
          }
        }]
      },

在頁面里面,我們定義了一些分頁查詢的處理?xiàng)l件和對象,如下所示。

查詢表單則定義一個(gè)單獨(dú)的表單對象,如下代碼所示

 searchForm: { // 查詢表單
    UserName: '',
    PhoneNumber: '',
    creationTime: ''
  },

頁面加載準(zhǔn)備好,我們就調(diào)用獲取列表的數(shù)據(jù)即可。

created() { // 頁面加載后,加載列表數(shù)據(jù)
	this.getlist()
},

獲取列表的處理操作如下代碼所示,主要就是準(zhǔn)備構(gòu)建好對應(yīng)的查詢參數(shù),然后調(diào)用UserApi類的接口查詢列表即可。

getlist() { // 列表數(shù)據(jù)獲取
      var CreationTimeStart = ''
      if (this.searchForm.creationTime && this.searchForm.creationTime.length > 0) {
        CreationTimeStart = this.parseTime(this.searchForm.creationTime[0], '{y}-{m}-wppm3vysvbp')
      }
      var CreationTimeEnd = ''
      if (this.searchForm.creationTime && this.searchForm.creationTime.length > 1) {
        CreationTimeEnd = this.parseTime(this.searchForm.creationTime[1], '{y}-{m}-wppm3vysvbp')
      }

      var param = { // 構(gòu)造常規(guī)的分頁查詢條件
        SkipCount: (this.pageinfo.pageindex - 1) * this.pageinfo.pagesize,
        MaxResultCount: this.pageinfo.pagesize,
        // 過濾條件
        UserName: this.searchForm.UserName,
        PhoneNumber: this.searchForm.PhoneNumber,
        CreationTimeStart: CreationTimeStart,
        CreationTimeEnd: CreationTimeEnd
      };

      // 獲取列表,綁定到模型上,并修改分頁數(shù)量
      this.listLoading = true
      user.GetAll(param).then(data => {
        this.list = data.result.items
        this.pageinfo.total = data.result.totalCount
        this.listLoading = false
      })
    },
    search() { // 查詢列表處理
      this.pageinfo.pageindex = 1;// 重置為第一頁=
      this.getlist()
    },

通過列表的查詢操作,我們就可以把數(shù)據(jù)獲取到,界面就會(huì)得到及時(shí)的更新顯示了

// 獲取列表,綁定到模型上,并修改分頁數(shù)量
      this.listLoading = true
      user.GetAll(param).then(data => {
        this.list = data.result.items
        this.pageinfo.total = data.result.totalCount
        this.listLoading = false
      })

而列表主要就是在界面使用el-table組件進(jìn)行展示的了,如下圖所示代碼。

el-table綁定了對應(yīng)的數(shù)據(jù),并設(shè)置好顯示的格式以及選擇操作事件、行雙擊事件等操作。

而el-table里面的顯示的列,需要根據(jù)我們返回?cái)?shù)據(jù)的屬性名稱進(jìn)行顯示,如下代碼所示。

而如果我們需要對屬性進(jìn)行特殊的展示,我們就需要使用v-if條件或者過濾器進(jìn)行處理了。如下是根據(jù)不同內(nèi)容,構(gòu)建標(biāo)簽顯示內(nèi)容。

<el-table-column align="center" label="賬號激活" width="80">
        <template slot-scope="scope">
          <el-tag v-if="scope.row.isActive === true" type="success" effect="dark">已激活</el-tag>
          <el-tag v-else type="danger" effect="dark">未激活</el-tag>
        </template>
      </el-table-column>

而對于時(shí)間,我們則可以使用格式化函數(shù)或者過濾器規(guī)范顯示的格式內(nèi)容。

<el-table-column align="center" label="創(chuàng)建時(shí)間" width="120" prop="creationTime" :formatter="dateFormat" />

其中:formatter="dateFormat" 指定了對應(yīng)的格式化處理函數(shù)。

dateFormat(row, column, cellValue) {
      // this.parseTime是在main.js中的全局掛載函數(shù)
      return cellValue ? this.parseTime(cellValue, '{y}-{m}-wppm3vysvbp') : '' // 完整格式:{y}-{m}-wppm3vysvbp {h}-{i}-{s}
    },
    timeFormat(row, column, cellValue) {
      // this.parseTime是在main.js中的全局掛載函數(shù)
      return cellValue ? this.parseTime(cellValue, '{y}-{m}-wppm3vysvbp {h}:{i}:{s}') : '' // 完整格式:{y}-{m}-wppm3vysvbp {h}-{i}-{s}
    }

另外,操作列的代碼,主要就是構(gòu)建一些方法操作的入口,并傳遞對應(yīng)的變量,如ID值即可。

<el-table-column align="center" label="操作" width="190">
        <template scope="scope">
          <el-row>
            <el-tooltip effect="light" content="查看" placement="top-start">
              <el-button icon="el-icon-search" type="success" circle size="mini" @click="showView(scope.row.id)" />
            </el-tooltip>
            <el-tooltip effect="light" content="編輯" placement="top-start">
              <el-button icon="el-icon-edit" type="primary" circle size="mini" @click="showEdit(scope.row.id)" />
            </el-tooltip>
            <el-tooltip effect="light" content="刪除" placement="top-start">
              <el-button icon="el-icon-delete" type="danger" circle size="mini" @click="showDelete(scope.row.id)" />
            </el-tooltip>
            <el-tooltip effect="light" content="重置密碼" placement="top-start">
              <el-button icon="el-icon-setting" type="warning" circle size="mini" @click="showSetPass(scope.row.id)" />
            </el-tooltip>
          </el-row>
        </template>
      </el-table-column>

列表的底部分頁處理,也是利用對應(yīng)的屬性進(jìn)行顯示即可,并處理分頁變化的事件。

<div class="block" style="height:70px;">
      <el-pagination
        :current-page="pageinfo.pageindex"
        :page-size="pageinfo.pagesize"
        :total="pageinfo.total"
        :page-sizes="[10,20,30,40]"
        layout="total, sizes, prev, pager, next"
        @size-change="sizeChange"
        @current-change="currentChange"
      />
    </div>

最后完成列表界面代碼,顯示列表界面如下所示。

而對于查看、編輯、新增等對話框,一般我們需要?jiǎng)?chuàng)建對應(yīng)的表單屬性,用來承載對應(yīng)的信息的,如我們?yōu)榱瞬榭葱畔⒌男枰?,?chuàng)建一個(gè)viewForm的對象,如下所示。

viewForm: { // 查看表單
        id: '',
        userName: '',
        surname: '',
        name: '',
        emailAddress: '',
        phoneNumber: '',
        ouNames: ''
      },

在查看信息對話框里面,我們展示對應(yīng)的用戶信息,包括基礎(chǔ)信息和相關(guān)的關(guān)系,如下界面代碼所示。

界面組件通過v-modal進(jìn)行綁定對應(yīng)的ViewForm屬性對象即可。

最后,我們在觸發(fā)showView函數(shù)里面,獲取對應(yīng)的用戶信息,然后展示在界面上即可,showView函數(shù)代碼如下所示。

showView(id) { // 顯示查看對話框處理
      var param = { id: id }
      user.Get(param).then(data => {
        // console.log(data.result)
        Object.assign(this.viewForm, data.result);

        this.getOuName(id).then(result => {
          this.viewForm.ouNames = result
        })
      })
      this.getFunctionsByUser(id)

      this.isView = true
    },

查看界面效果如下所示。

在新增或者編輯處理界面中,我們修改了數(shù)據(jù),都會(huì)提交到ABP后端進(jìn)行錄入或者更新,因此就涉及到數(shù)據(jù)的回寫處理,然后提示客戶端狀態(tài)即可。

下面是保存編輯界面的內(nèi)容操作。

saveEdit() { // 保存數(shù)據(jù)處理
      this.$refs['editForm'].validate(valid => {
        if (valid) {
          // 保存數(shù)據(jù)
          const form = this.editForm
          user.Update(form).then(data => {
            // console.log(data)
            if (data.success) {
              // 提示信息
              this.msgSuccess('更新成功!')
              // 刷新數(shù)據(jù)
              this.getlist()
            } else {
              this.msgError('更新失?。? + data.error)
            }

            this.$refs['editForm'].resetFields()
            // 重置窗口狀態(tài)
            this.closeDialog()
          })
        }
      })
    },

其中msgSuccess、msgError是全局掛載的提示信息函數(shù),在入口main.js里面統(tǒng)一處理,封裝的函數(shù)方便在各個(gè)界面中統(tǒng)一處理。

以上就是關(guān)于用戶管理界面的內(nèi)容介紹,其中涉及到前端API類的封裝處理,界面組件的使用,以及一些常規(guī)操作,希望能夠帶給大家一些vue+element開發(fā)界面的參考。

以上就是Vue Element前端應(yīng)用開發(fā)之用戶管理模塊的處理的詳細(xì)內(nèi)容,更多關(guān)于Vue Element之用戶管理模塊的處理的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • vue+django實(shí)現(xiàn)一對一聊天功能的實(shí)例代碼

    vue+django實(shí)現(xiàn)一對一聊天功能的實(shí)例代碼

    這篇文章主要介紹了vue+django實(shí)現(xiàn)一對一聊天功能,主要是通過websocket,由于Django不支持websocket,所以我使用了django-channels。,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2019-07-07
  • VueCli3中兼容IE11配置的艱苦歷程

    VueCli3中兼容IE11配置的艱苦歷程

    這篇文章主要介紹了VueCli3中兼容IE11配置的艱苦歷程,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • 100行代碼實(shí)現(xiàn)一個(gè)vue分頁組功能

    100行代碼實(shí)現(xiàn)一個(gè)vue分頁組功能

    今天用vue來實(shí)現(xiàn)一個(gè)分頁組件,總體來說,vue實(shí)現(xiàn)比較簡單,樣式部分模仿了elementUI。接下來本文通過實(shí)例代碼給大家介紹100行代碼實(shí)現(xiàn)一個(gè)vue分頁組功能,感興趣的朋友跟隨小編一起看看吧
    2018-11-11
  • Vue的混合繼承詳解

    Vue的混合繼承詳解

    這篇文章主要介紹了Vue的混合繼承,有需要的朋友可以借鑒參考下,希望能夠有所幫助,希望能夠給你帶來幫助
    2021-11-11
  • Vue?前端?el-input?實(shí)現(xiàn)輸入框內(nèi)容始終添加在尾部%的方法

    Vue?前端?el-input?實(shí)現(xiàn)輸入框內(nèi)容始終添加在尾部%的方法

    在el-input輸入框的尾部添加%,可以通過suffix或append插槽實(shí)現(xiàn),suffix插槽簡單直接,適用于靜態(tài)顯示%,而append插槽更靈活,適用于顯示更復(fù)雜的內(nèi)容,感興趣的朋友跟隨小編一起看看吧
    2024-12-12
  • Vue3中使用i18n,this.$t報(bào)錯(cuò)問題及解決

    Vue3中使用i18n,this.$t報(bào)錯(cuò)問題及解決

    這篇文章主要介紹了Vue3中使用i18n,this.$t報(bào)錯(cuò)問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • Vue3使用中這些坑你都踩過嗎

    Vue3使用中這些坑你都踩過嗎

    Vue3?目前已經(jīng)趨于穩(wěn)定,不少代碼庫都已經(jīng)開始使用它,很多項(xiàng)目未來也必然要遷移至Vue3,本文記錄了使用Vue3時(shí)遇到的一些問題,希望能對大家有所幫助
    2023-09-09
  • 詳解vue或uni-app的跨域問題解決方案

    詳解vue或uni-app的跨域問題解決方案

    這篇文章主要介紹了詳解vue或uni-app的跨域問題解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • vue3.0基于views批量實(shí)現(xiàn)動(dòng)態(tài)路由的方法(示例代碼)

    vue3.0基于views批量實(shí)現(xiàn)動(dòng)態(tài)路由的方法(示例代碼)

    以前vue項(xiàng)目中也有很多實(shí)現(xiàn)動(dòng)態(tài)路由的方法,比如有一些項(xiàng)目涉及權(quán)限的可能會(huì)使用api請求路由數(shù)據(jù)在來createRouter,或者本地構(gòu)建使用routes.push來動(dòng)態(tài)構(gòu)建路由, 今天介紹一種新的方式來基于某個(gè)文件夾批量構(gòu)建動(dòng)態(tài)路由的方法,感興趣的朋友一起看看吧
    2024-12-12
  • Vue.use()和Vue.prototype使用詳解

    Vue.use()和Vue.prototype使用詳解

    Vue.use()主要用于注冊全局插件,當(dāng)插件具有install方法時(shí),調(diào)用Vue.use()可以全局使用該插件,Vue.prototype用于注冊全局變量,這些變量在項(xiàng)目任何位置都可以通過this.$變量名訪問,兩者的主要區(qū)別在于Vue.use()用于插件,Vue.prototype用于變量
    2024-10-10

最新評論

津市市| 法库县| 修文县| 高安市| 定襄县| 景德镇市| 噶尔县| 五大连池市| 二连浩特市| 连平县| 桑日县| 伊春市| 北京市| 阿拉尔市| 湘阴县| 高邮市| 迭部县| 交城县| 南华县| 绥化市| 和平区| 新巴尔虎左旗| 嘉善县| 翁牛特旗| 南川市| 磐安县| 松阳县| 来宾市| 新巴尔虎左旗| 略阳县| 望江县| 罗甸县| 景宁| 柯坪县| 新蔡县| 承德市| 固安县| 凭祥市| 盐源县| 漠河县| 河南省|