123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277 |
- <template>
- <view class="uni-container">
- <uni-forms ref="form" v-model="formData" :rules="rules" validateTrigger="bind" @submit="submit">
- <uni-forms-item name="username" label="用户名" required>
- <uni-easyinput v-model="formData.username" :clearable="false" placeholder="请输入用户名" />
- </uni-forms-item>
- <uni-forms-item name="nickname" label="用户昵称" required>
- <uni-easyinput v-model="formData.nickname" :clearable="false" placeholder="请输入用户昵称" />
- </uni-forms-item>
- <uni-forms-item :name="showPassword ? 'password' : ''" label="重置密码">
- <span v-show="!showPassword" class="reset-password-btn" @click="trigger">点击重置密码</span>
- <uni-easyinput v-show="showPassword" v-model="formData.password" :clearable="false" placeholder="请输入重置密码">
- <view slot="right" class="cancel-reset-password-btn" @click="trigger">取消</view>
- </uni-easyinput>
- </uni-forms-item>
- <uni-forms-item name="role" label="角色列表" class="flex-center-x">
- <uni-data-checkbox multiple :localdata="roles" v-model="formData.role" />
- </uni-forms-item>
- <uni-forms-item name="tags" label="用户标签" labelWidth="100" class="flex-center-x">
- <uni-data-checkbox :multiple="true" v-model="formData.tags" collection="uni-id-tag"
- field="tagid as value, name as text"></uni-data-checkbox>
- <span class="link-btn" @click="gotoTagAdd">新增</span>
- <span class="link-btn" @click="gotoTagList" style="margin-left: 10px;">管理</span>
- </uni-forms-item>
- <uni-forms-item name="authorizedApp" label="可登录应用" class="flex-center-x">
- <uni-data-checkbox :multiple="true" v-model="formData.authorizedApp" collection="opendb-app-list"
- field="appid as value, name as text"></uni-data-checkbox>
- <span class="link-btn" @click="gotoAppList">管理</span>
- </uni-forms-item>
- <uni-forms-item name="mobile" label="手机号">
- <uni-easyinput v-model="formData.mobile" :clearable="false" placeholder="请输入手机号" />
- </uni-forms-item>
- <uni-forms-item name="email" label="邮箱">
- <uni-easyinput v-model="formData.email" :clearable="false" placeholder="请输入邮箱" />
- </uni-forms-item>
- <uni-forms-item name="status" label="用户状态">
- <switch v-if="Number(formData.status) < 2" @change="binddata('status', $event.detail.value)" :checked="formData.status" />
- <view v-else class="uni-form-item-empty">{{parseUserStatus(formData.status)}}</view>
- </uni-forms-item>
- <view class="uni-button-group">
- <button style="width: 100px;" type="primary" class="uni-button" @click="submitForm">{{$t('common.button.submit')}}</button>
- <navigator open-type="navigateBack" style="margin-left: 15px;"><button style="width: 100px;" class="uni-button">{{$t('common.button.back')}}</button></navigator>
- </view>
- </uni-forms>
- </view>
- </template>
- <script>
- import { validator } from '@/js_sdk/validator/uni-id-users.js';
- const db = uniCloud.database();
- const dbCmd = db.command;
- const dbCollectionName = 'uni-id-users';
- function getValidator(fields) {
- let result = {}
- for (let key in validator) {
- if (fields.includes(key)) {
- result[key] = validator[key]
- }
- }
- return result
- }
- export default {
- data() {
- return {
- showPassword: false,
- formData: {
- "username": "",
- "nickname": "",
- "password": "",
- "role": [],
- "authorizedApp": [],
- "mobile": "",
- "email": "",
- "status": false //默认禁用
- },
- rules: {
- ...getValidator(["username", "password", "role", "mobile", "email"]),
- "status": {
- "rules": [{
- "format": "bool"
- }]
- }
- },
- roles: []
- }
- },
- onLoad(e) {
- const id = e.id
- this.formDataId = id
- this.getDetail(id)
- this.loadroles()
- },
- methods: {
- /**
- * 跳转应用管理的 list 页
- */
- gotoAppList() {
- uni.navigateTo({
- url: '../app/list'
- })
- },
- gotoTagList() {
- uni.navigateTo({
- url: '../tag/list'
- })
- },
- gotoTagAdd() {
- uni.navigateTo({
- url: '../tag/add',
- events: {
- refreshCheckboxData: () => {
- this.$refs.checkbox.loadData()
- }
- }
- })
- },
- /**
- * 切换重置密码框显示或隐藏
- */
- trigger() {
- this.showPassword = !this.showPassword
- },
- /**
- * 触发表单提交
- */
- submitForm(form) {
- this.$refs.form.submit();
- },
- /**
- * 表单提交
- * @param {Object} event 回调参数 Function(callback:{value,errors})
- */
- submit(event) {
- const {
- value,
- errors
- } = event.detail
- // 表单校验失败页面会提示报错 ,要停止表单提交逻辑
- if (errors) {
- return
- }
- uni.showLoading({
- title: '修改中...',
- mask: true
- })
- // 是否启用功能的数据类型转换, 0 正常, 1 禁用
- if (typeof value.status === "boolean") {
- value.status = Number(!value.status)
- }
- value.uid = this.formDataId
- this.$request('updateUser', value).then(() => {
- uni.showToast({
- title: '修改成功'
- })
- this.getOpenerEventChannel().emit('refreshData')
- setTimeout(() => uni.navigateBack(), 500)
- }).catch(err => {
- uni.showModal({
- content: err.message || '请求服务失败',
- showCancel: false
- })
- }).finally(err => {
- uni.hideLoading()
- })
- },
- resetPWd(resetData) {
- this.$request('system/user/resetPwd', resetData)
- .then().catch(err => {
- uni.showModal({
- content: err.message || '请求服务失败',
- showCancel: false
- })
- }).finally()
- },
- /**
- * 获取表单数据
- * @param {Object} id
- */
- getDetail(id) {
- uni.showLoading({
- mask: true
- })
- db.collection(dbCollectionName)
- .doc(id)
- .field('username,nickname,role,dcloud_appid as authorizedApp,tags,mobile,email,status')
- .get()
- .then((res) => {
- const data = res.result.data[0]
- if (data) {
- if (data.status === undefined) {
- data.status = true
- }
- if (data.status === 0) {
- data.status = true
- }
- if (data.status === 1) {
- data.status = false
- }
- this.formData = Object.assign(this.formData, data)
- }
- }).catch((err) => {
- uni.showModal({
- content: err.message || '请求服务失败',
- showCancel: false
- })
- }).finally(() => {
- uni.hideLoading()
- })
- },
- loadroles() {
- db.collection('uni-id-roles').limit(500).get().then(res => {
- const roleIds = []
- this.roles = res.result.data.map(item => {
- roleIds.push(item.role_id)
- return {
- value: item.role_id,
- text: item.role_name
- }
- })
- if (roleIds.indexOf('admin') === -1) {
- this.roles.unshift({
- value: 'admin',
- text: '超级管理员'
- })
- }
- }).catch(err => {
- uni.showModal({
- title: '提示',
- content: err.message,
- showCancel: false
- })
- })
- },
- // status 对应文字显示
- parseUserStatus(status) {
- if (status === 0) {
- return '启用'
- } else if (status === 1) {
- return '禁用'
- } else if (status === 2) {
- return '审核中'
- } else if (status === 3) {
- return '审核拒绝'
- } else {
- return '启用'
- }
- }
- }
- }
- </script>
- <style>
- .reset-password-btn {
- /* height: 100%; */
- line-height: 36px;
- color: #007AFF;
- text-decoration: underline;
- cursor: pointer;
- }
- .cancel-reset-password-btn {
- color: #007AFF;
- padding-right: 10px;
- cursor: pointer;
- }
- ::v-deep .uni-forms-item__label {
- width: 90px !important;
- }
- </style>
|