Browse Source

Merge branch 'dev' into 'master'

Dev

See merge request motive-power/yxl/yxl-web-admin-frontend!29
梁展鹏 3 năm trước cách đây
mục cha
commit
da29808c48

+ 7 - 2
src/api/photoWarehouse/index.js

@@ -11,11 +11,16 @@ export const saveItem = params =>
 export const delItem = ({ id, ...params }) =>
 	api.del(`/yxl-back-end/admin/photo-warehouse/${id}`, params);
 export const auditItem = params =>
-  api.post(`/yxl-back-end/admin/photo-warehouse/audit`, params);
+	api.post(`/yxl-back-end/admin/photo-warehouse/audit`, params);
 export const auditMultiItem = ({ ...params }) =>
-  api.post(`/yxl-back-end/admin/photo-warehouse/audit/multi`, params);
+	api.post(`/yxl-back-end/admin/photo-warehouse/audit/multi`, params);
 export const updateItem = ({ id, ...params }) =>
 	api.put(`/yxl-back-end/admin/photo-warehouse/${id}`, params);
 
 export const multUpload = params =>
 	api.postData(`/yxl-back-end/admin/photo-warehouse/multupload`, params);
+
+export const fissonPhoto = params =>
+	api.post(`/yxl-back-end/admin/photo-warehouse/processing-by`, params);
+export const multAuditPhoto = params =>
+	api.post(`/yxl-back-end/admin/photo-warehouse/audit/multi`, params);

+ 12 - 0
src/api/system/account.js

@@ -20,3 +20,15 @@ export const delItem = ({ id, ...params }) =>
 
 export const getSelectList = params =>
   api.get(`/yxl-back-end/framework/uiac/account/search-select`, params);
+
+export const getUserRole = ({ id, ...params }) =>
+  api.get(`/yxl-back-end/framework/uiac/account/${id}/account-role`, params);
+
+export const updateUserRole = ({ id, ...params }) =>
+  api.put(
+    `/yxl-back-end/framework/uiac/account/${id}/account-role`,
+    params.roles
+  );
+
+export const lockAccount = id =>
+  api.del(`/yxl-back-end/framework/uiac/account/is-locked/${id}`, {});

+ 24 - 0
src/utils/dialog-helper.js

@@ -19,6 +19,9 @@ import PhotoUpload from 'views/photographerManagement/photoVerify/modal/ItemModa
 import PhotoMultUpload from 'views/photographerManagement/photoVerify/modal/MultItemModal.vue';
 import AliOssMulti from 'views/photographerManagement/photoVerify/modal/ali-oss-multi.vue';
 import UpdateAppItem from 'views/baseManagement/updateList/modal/ItemModal.vue';
+import AccountRole from 'views/systemManagement/accountManagement/modal/RoleModal.vue';
+import MultFisson from 'views/photoManagement/photoVerifyManagement/modal/MultFissonModal.vue';
+import MultAudit from 'views/photoManagement/photoVerifyManagement/modal/MultAuditModal.vue';
 
 const modal = (Component, props) => {
   let _component = null;
@@ -41,6 +44,27 @@ const modal = (Component, props) => {
   document.body.appendChild(_component.$el);
 };
 
+let MultAuditModal = data => {
+  modal(MultAudit, data);
+};
+Vue.prototype.$MultAuditModal = params => {
+  MultAuditModal(params);
+};
+
+let MultFissonModal = data => {
+  modal(MultFisson, data);
+};
+Vue.prototype.$MultFissonModal = params => {
+  MultFissonModal(params);
+};
+
+let AccountRoleModal = data => {
+  modal(AccountRole, data);
+};
+Vue.prototype.$AccountRoleModal = params => {
+  AccountRoleModal(params);
+};
+
 let UpdateAppItemModal = data => {
   modal(UpdateAppItem, data);
 };

+ 22 - 0
src/utils/index.js

@@ -130,3 +130,25 @@ export const setStatus = (label, value) => {
   }));
   return res;
 };
+
+/**
+ * 过滤参数
+ * @param  {[type]} params [description]
+ * @return {[type]}        [description]
+ */
+export const format = params => {
+  const keys = Object.keys(params);
+  if (!keys.length) {
+    return {};
+  }
+  return keys.reduce((initObj, key) => {
+    let val = params[key];
+    if (typeof val === 'string') {
+      val = val.trim();
+    }
+    if (val !== null && val !== undefined && val !== '') {
+      initObj[key] = val;
+    }
+    return initObj;
+  }, {});
+};

+ 21 - 11
src/views/photoManagement/photoVerifyManagement/index.vue

@@ -10,7 +10,6 @@
       :page-change="pageChange"
     >
       <template v-slot:batch-btn-box="{ selected }">
-
         <!-- <el-col :span="1.5">
           <el-button
             type="success"
@@ -33,8 +32,21 @@
             >批量审核</el-button
           >
         </el-col>
+        <el-col :span="1.5">
+          <el-button
+            type="primary"
+            plain
+            size="mini"
+            @click="$MultFissonModal()"
+            >一键裂变</el-button
+          >
+        </el-col>
+        <el-col :span="1.5">
+          <el-button type="primary" plain size="mini" @click="$MultAuditModal()"
+            >一键审核</el-button
+          >
+        </el-col>
       </template>
-
     </base-table>
   </div>
 </template>
@@ -44,7 +56,7 @@ import toolbar from './toolbar';
 import mxFilterList from '@/mixins/filterList';
 import { getPage } from '@/api/photoWarehouse';
 
-const checkArr = (arr) => {
+const checkArr = arr => {
   if (Array.isArray(arr)) {
     if (arr.length === 0) {
       return 'null';
@@ -58,7 +70,6 @@ const checkArr = (arr) => {
   }
 };
 
-
 export default {
   name: 'photoVerifyManagement',
 
@@ -66,16 +77,15 @@ export default {
 
   filters: {
     // 单选可用
-    singleBatch: (arr) => {
+    singleBatch: arr => {
       return checkArr(arr) !== 'single';
     },
     // 非空可用
-    multipleBatch: (arr) => {
+    multipleBatch: arr => {
       return checkArr(arr) === 'null';
-    },
+    }
   },
 
-
   mixins: [
     mxFilterList({
       fetchList: getPage // 在下方data再声明一个 fetchList: iGetList 同等效果
@@ -86,9 +96,9 @@ export default {
     return {
       columns: [
         {
-          key: 'selection',
+          key: 'selection'
         },
-         {
+        {
           key: 'id',
           name: '标识',
           width: this.$col.b
@@ -218,7 +228,7 @@ export default {
     handleAudit(arr) {
       this.$PhotoVerifyMultItemModal({
         ids: arr.map(x => x.id)
-      })
+      });
     }
   }
 };

+ 81 - 0
src/views/photoManagement/photoVerifyManagement/modal/MultAuditModal.vue

@@ -0,0 +1,81 @@
+<template>
+  <el-dialog
+    :title="title"
+    :visible.sync="modal"
+    :close-on-click-modal="false"
+    width="600px"
+    @close="
+      res => {
+        $emit('cancel');
+      }
+    "
+  >
+    <el-form ref="form" :model="form" label-width="100px">
+      <el-form-item label="场景" prop="kindergartenId">
+        <SceneSelect v-model="form.kindergartenId" :clearable="false" />
+      </el-form-item>
+      <el-form-item label="活动">
+        <ActivitySelect v-model="form.activityId" :firstLoad="true" />
+      </el-form-item>
+
+      <el-row style="text-align: right;">
+        <el-button class="mt-40" size="small" type="primary" @click="saveData"
+          >确认</el-button
+        >
+      </el-row>
+    </el-form>
+  </el-dialog>
+</template>
+
+<script>
+import { multAuditPhoto } from '@/api/photoWarehouse';
+import { format } from '@/utils';
+
+export default {
+  name: 'MultFissonModal',
+  props: {},
+  data() {
+    return {
+      title: '批量一键审核',
+      modal: true,
+
+      form: {
+        kindergartenId: null,
+        activityId: null
+      }
+    };
+  },
+  methods: {
+    async saveData(obj, name, size) {
+      const params = {
+        kindergartenId: this.form.kindergartenId,
+        activityId: this.form.activityId
+      };
+      const { success, msg } = await multAuditPhoto(format(params));
+
+      if (success) {
+        this.$success('批量审核成功!');
+        this.modal = false;
+        this.$g_emit('photo_reload');
+      } else {
+        this.$error(msg);
+      }
+    },
+    close() {
+      this.modal = false;
+      this.$g_emit('photo_reload');
+    }
+  }
+};
+</script>
+
+<style lang="scss" scoped></style>
+
+<style>
+.el-upload {
+  width: 100%;
+}
+.el-upload-dragger {
+  width: 100%;
+}
+</style>

+ 81 - 0
src/views/photoManagement/photoVerifyManagement/modal/MultFissonModal.vue

@@ -0,0 +1,81 @@
+<template>
+  <el-dialog
+    :title="title"
+    :visible.sync="modal"
+    :close-on-click-modal="false"
+    width="600px"
+    @close="
+      res => {
+        $emit('cancel');
+      }
+    "
+  >
+    <el-form ref="form" :model="form" label-width="100px">
+      <el-form-item label="场景" prop="kindergartenId">
+        <SceneSelect v-model="form.kindergartenId" :clearable="false" />
+      </el-form-item>
+      <el-form-item label="活动">
+        <ActivitySelect v-model="form.activityId" :firstLoad="true" />
+      </el-form-item>
+
+      <el-row style="text-align: right;">
+        <el-button class="mt-40" size="small" type="primary" @click="saveData"
+          >确认</el-button
+        >
+      </el-row>
+    </el-form>
+  </el-dialog>
+</template>
+
+<script>
+import { fissonPhoto } from '@/api/photoWarehouse';
+import { format } from '@/utils';
+
+export default {
+  name: 'MultFissonModal',
+  props: {},
+  data() {
+    return {
+      title: '批量一键裂变',
+      modal: true,
+
+      form: {
+        kindergartenId: null,
+        activityId: null
+      }
+    };
+  },
+  methods: {
+    async saveData(obj, name, size) {
+      const params = {
+        kindergartenId: this.form.kindergartenId,
+        activityId: this.form.activityId
+      };
+      const { success, msg } = await fissonPhoto(format(params));
+
+      if (success) {
+        this.$success('裂变成功!');
+        this.modal = false;
+        this.$g_emit('photo_reload');
+      } else {
+        this.$error(msg);
+      }
+    },
+    close() {
+      this.modal = false;
+      this.$g_emit('photo_reload');
+    }
+  }
+};
+</script>
+
+<style lang="scss" scoped></style>
+
+<style>
+.el-upload {
+  width: 100%;
+}
+.el-upload-dragger {
+  width: 100%;
+}
+</style>

+ 59 - 7
src/views/systemManagement/accountManagement/index.vue

@@ -40,7 +40,7 @@
 <script>
 import toolbar from './toolbar';
 import mxFilterList from '@/mixins/filterList';
-import { getPage, getCount } from '@/api/system/account';
+import { getPage, getCount, lockAccount } from '@/api/system/account';
 
 export default {
   name: 'AccountManagement',
@@ -107,7 +107,8 @@ export default {
           width: '120',
           type: 'tag',
           fetchTagType: val => 'info',
-          tagName: row => row.gender === 0 ? '未知' : row.gender === 1 ? '男' : '女'
+          tagName: row =>
+            row.gender === 0 ? '未知' : row.gender === 1 ? '男' : '女'
         },
         {
           key: 'createAt',
@@ -121,15 +122,59 @@ export default {
           type: 'tag',
           fetchTagType: val => (val ? 'danger' : 'info'),
           tagName: row => (row.isLocked ? '是' : '否')
+        },
+        {
+          key: 'action',
+          name: '操作',
+          width: '120',
+          render: (h, { row }) => {
+            const action = [];
+            action.push(
+              h(
+                'el-button',
+                {
+                  props: {
+                    type: 'text'
+                  },
+                  on: {
+                    click: () =>
+                      this.$AccountRoleModal({
+                        id: row.id
+                      })
+                  }
+                },
+                '分配角色'
+              )
+            );
+            action.push(
+              h(
+                'el-button',
+                {
+                  props: {
+                    type: 'text'
+                  },
+                  on: {
+                    click: () => this.handlerLockAccount(row.id)
+                  }
+                },
+                row.isLocked ? '解封' : '禁用'
+              )
+            );
+
+            return h('div', action);
+          }
         }
-        // {
-        //   key: 'action',
-        //   name: '操作',
-        //   width: '120'
-        // }
       ]
     };
   },
+
+  created() {
+    this.$g_on('account_reload', this.reload);
+  },
+
+  beforeDestroy() {
+    this.$g_off('account_reload', this.reload);
+  },
   methods: {
     async pageChange(page) {
       this.pagination.page = page;
@@ -154,6 +199,13 @@ export default {
         }
         this.loadCallBack(data);
       }
+    },
+    async handlerLockAccount(id) {
+      const { success, msg } = await lockAccount(id);
+      if (success) {
+        this.$g_emit('account_reload');
+        this.$success('保存成功!');
+      }
     }
   }
 };

+ 108 - 0
src/views/systemManagement/accountManagement/modal/RoleModal.vue

@@ -0,0 +1,108 @@
+<template>
+  <el-dialog
+    :title="title"
+    :visible.sync="modal"
+    width="40%"
+    :close-on-click-modal="false"
+    @close="
+      res => {
+        $emit('cancel');
+      }
+    "
+  >
+    <el-form ref="form" :model="form" label-width="80px">
+      <el-form-item label="角色列表" prop="auditStatus">
+        <el-checkbox-group v-model="form.roles">
+          <el-checkbox
+            v-for="item in options"
+            :label="item.label"
+            :key="item.key"
+            >{{ item.label }}</el-checkbox
+          >
+        </el-checkbox-group>
+      </el-form-item>
+    </el-form>
+    <span slot="footer" class="dialog-footer">
+      <el-button @click="modal = false">取消</el-button>
+      <el-button type="primary" @click="handleConfirm">确定</el-button>
+    </span>
+  </el-dialog>
+</template>
+
+<script>
+import { getUserRole, updateUserRole } from '@/api/system/account';
+import { getList } from '@/api/system/index';
+
+export default {
+  name: 'AccountRoleItemModal',
+
+  props: {
+    id: {
+      type: String,
+      default: ''
+    }
+  },
+
+  data() {
+    return {
+      title: '用户分配角色',
+      modal: true,
+      form: {
+        roles: []
+      },
+      options: []
+    };
+  },
+
+  watch: {
+    id: {
+      handler(id) {
+        id && this.loadData();
+      },
+      immediate: true
+    }
+  },
+
+  mounted() {
+    this.loadList();
+  },
+
+  methods: {
+    async loadList() {
+      const { data } = await getList();
+      this.options = data.map(x => ({ key: x.code, label: x.name }));
+    },
+    async loadData() {
+      const { success, data, msg } = await getUserRole({
+        id: this.id
+      });
+      if (success) {
+        this.form.roles = data;
+      }
+    },
+
+    handleConfirm() {
+      this.$refs.form.validate(async valid => {
+        if (valid) {
+          const params = {
+            roles: this.form.roles
+          };
+          if (this.id) params.id = this.id;
+          const { success, msg } = await updateUserRole(params);
+          if (success) {
+            this.$success('保存成功!');
+            this.modal = false;
+            this.$g_emit('account_reload');
+          }
+        }
+      });
+    }
+  }
+};
+</script>
+
+<style lang="scss" scoped>
+.pre-img {
+  height: 80px;
+}
+</style>