Bladeren bron

Merge branch 'lin_增值服务' of ssh://gogs.zfire.top:2222/zfire-front/zfire-newmall-admin into develop

# Conflicts:
#	src/views/setting/notification/announcement/index.vue
linwenxin 1 jaar geleden
bovenliggende
commit
b62614e321

+ 188 - 173
src/views/setting/account/index.vue

@@ -1,149 +1,149 @@
 <template>
-  <div class="app-container">
-    <div class="setting_title">账户管理</div>
-    <el-divider></el-divider>
-
-    <div class="mymain-container">
-      <div class="btn-group clearfix">
-        <div class="fl">
-          <el-button size="small" type="primary" icon="el-icon-plus" @click="addOrEdit('add')">新增账户</el-button>
-        </div>
-        <div class="fr">
-          <el-select v-model="screenForm.role" placeholder="全部" size="small" style="width: 120px; margin-right: 10px;"
-            @change="getListByScreen">
-            <el-option label="全部角色" value=""></el-option>
-            <el-option :label="item.name" :value="item.adminRoleId" v-for="(item, index) in roleList"
-              :key="index"></el-option>
-          </el-select>
-          <el-select v-model="screenForm.status" placeholder="全部" size="small" style="width: 120px; margin-right: 10px;"
-            @change="getListByScreen">
-            <el-option label="全部状态" value=""></el-option>
-            <el-option :label="item.label" :value="item.value" v-for="(item, index) in select_status"
-              :key="index"></el-option>
-          </el-select>
-          <el-input placeholder="请输入内容" v-model="screenForm.keyword" size="small" style="width: 180px;">
-            <el-button slot="append" icon="el-icon-search" size="small" @click="getListByScreen"></el-button>
-          </el-input>
+  <zj-tab-page ref="tabPage" :defaultActives="[{ key: 'list', label: '列表页面', essential: true }]">
+    <template slot-scope="{activeKey, data}">
+      <div :style="{
+        width: '100%',
+        height: activeKey == 'list' ? '100%' : '0px',
+        overflow: 'hidden'
+      }">
+        <div class="app-container">
+          <div class="setting_title">账户管理</div>
+          <el-divider></el-divider>
+          <div class="mymain-container">
+            <div class="btn-group clearfix">
+              <div class="fl">
+                <el-button size="small" type="primary" icon="el-icon-plus" @click="addOrEdit('add')">新增账户</el-button>
+              </div>
+              <div class="fr">
+                <el-select v-model="screenForm.role" placeholder="全部" size="small"
+                  style="width: 120px; margin-right: 10px;" @change="getListByScreen">
+                  <el-option label="全部角色" value=""></el-option>
+                  <el-option :label="item.name" :value="item.adminRoleId" v-for="(item, index) in roleList"
+                    :key="index"></el-option>
+                </el-select>
+                <el-select v-model="screenForm.status" placeholder="全部" size="small"
+                  style="width: 120px; margin-right: 10px;" @change="getListByScreen">
+                  <el-option label="全部状态" value=""></el-option>
+                  <el-option :label="item.label" :value="item.value" v-for="(item, index) in select_status"
+                    :key="index"></el-option>
+                </el-select>
+                <el-input placeholder="请输入内容" v-model="screenForm.keyword" size="small" style="width: 180px;">
+                  <el-button slot="append" icon="el-icon-search" size="small" @click="getListByScreen"></el-button>
+                </el-input>
+              </div>
+            </div>
+            <div class="table">
+              <el-table v-loading="listLoading" :data="dataList" element-loading-text="Loading" border fit
+                highlight-current-row stripe>
+                <el-table-column align="center" label="序号" type="index" width="50"></el-table-column>
+                <el-table-column align="center" label="账号" prop="userName" min-width="120"></el-table-column>
+                <el-table-column align="center" label="用户名" prop="nickName" min-width="120"></el-table-column>
+                <el-table-column align="center" label="角色" prop="roleName" min-width="100"></el-table-column>
+                <el-table-column align="center" label="创建时间" prop="createTime" min-width="160"></el-table-column>
+                <el-table-column align="center" label="最后登录时间" prop="lastLoginTime" min-width="160"></el-table-column>
+                <el-table-column align="center" label="状态" class-name="status-col">
+                  <template slot-scope="scope">
+                    <el-tag :type="scope.row.status ? 'success' : 'danger'">{{ scope.row.status ? '正常' : '冻结' }}</el-tag>
+                  </template>
+                </el-table-column>
+                <el-table-column align="center" label="操作" min-width="160">
+                  <template slot-scope="scope">
+                    <el-popconfirm v-if="scope.row.status" style="margin-right: 10px;" title="确定冻结吗?"
+                      @confirm="changeStatus(scope.row.adminUserId, 0)">
+                      <el-button slot="reference" type="text">冻结</el-button>
+                    </el-popconfirm>
+                    <el-popconfirm v-else style="margin-right: 10px;" title="确定恢复吗?"
+                      @confirm="changeStatus(scope.row.adminUserId, 1)">
+                      <el-button slot="reference" type="text">恢复</el-button>
+                    </el-popconfirm>
+                    <el-button type="text" @click="addOrEdit('edit', scope.row.adminUserId)">编辑</el-button>
+                    <el-button type="text" @click="handleReset(scope.row.adminUserId)">重置密码</el-button>
+                  </template>
+                </el-table-column>
+              </el-table>
+            </div>
+            <div class="pagination clearfix">
+              <div class="fr">
+                <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
+                  :current-page="currentPage" :page-sizes="[10, 20, 30, 50]" :page-size="10"
+                  layout="total, sizes, prev, pager, next, jumper" :total="listTotal">
+                </el-pagination>
+              </div>
+            </div>
+          </div>
         </div>
       </div>
-
-      <div class="table">
-        <el-table v-loading="listLoading" :data="dataList" element-loading-text="Loading" border fit highlight-current-row
-          stripe>
-          <el-table-column align="center" label="序号" type="index" width="50"></el-table-column>
-          <el-table-column align="center" label="账号" prop="userName" min-width="120"></el-table-column>
-          <el-table-column align="center" label="用户名" prop="nickName" min-width="120"></el-table-column>
-          <el-table-column align="center" label="角色" prop="roleName" min-width="100"></el-table-column>
-          <el-table-column align="center" label="创建时间" prop="createTime" min-width="160"></el-table-column>
-          <el-table-column align="center" label="最后登录时间" prop="lastLoginTime" min-width="160"></el-table-column>
-          <el-table-column align="center" label="状态" class-name="status-col">
-            <template slot-scope="scope">
-              <el-tag :type="scope.row.status ? 'success' : 'danger'">{{ scope.row.status ? '正常' : '冻结' }}</el-tag>
-            </template>
-          </el-table-column>
-          <el-table-column align="center" label="操作" min-width="160">
-            <template slot-scope="scope">
-              <el-popconfirm v-if="scope.row.status" style="margin-right: 10px;" title="确定冻结吗?"
-                @confirm="changeStatus(scope.row.adminUserId, 0)">
-                <el-button slot="reference" type="text">冻结</el-button>
-              </el-popconfirm>
-              <el-popconfirm v-else style="margin-right: 10px;" title="确定恢复吗?"
-                @confirm="changeStatus(scope.row.adminUserId, 1)">
-                <el-button slot="reference" type="text">恢复</el-button>
-              </el-popconfirm>
-
-              <el-button type="text" @click="addOrEdit('edit', scope.row.adminUserId)">编辑</el-button>
-              <el-button type="text" @click="handleReset(scope.row.adminUserId)">重置密码</el-button>
-            </template>
-          </el-table-column>
-        </el-table>
-      </div>
-
-      <div class="pagination clearfix">
-        <div class="fr">
-          <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="currentPage"
-            :page-sizes="[10, 20, 30, 50]" :page-size="10" layout="total, sizes, prev, pager, next, jumper"
-            :total="listTotal">
-          </el-pagination>
+      <div v-if="~['add', 'edit'].indexOf(activeKey)" style="box-sizing: border-box;padding: 16px;">
+        <el-form ref="addForm" :model="addForm" :rules="addFormRules" label-position="left" label-width="120px">
+          <el-form-item label="账号" prop="account">
+            <el-input v-model="addForm.account" autocomplete="off" placeholder="请输入账号"></el-input>
+          </el-form-item>
+          <el-form-item label="用户名" prop="nickName">
+            <el-input v-model="addForm.nickName" autocomplete="off" placeholder="请输入用户名"></el-input>
+          </el-form-item>
+          <el-form-item label="手机号" prop="linkPhone">
+            <el-input v-model="addForm.linkPhone" autocomplete="off" placeholder="请输入手机号"></el-input>
+          </el-form-item>
+          <el-form-item label="角色组" prop="role">
+            <el-select v-model="addForm.role" placeholder="请选择角色组" style="width: 100%;">
+              <el-option :label="item.name" :value="item.adminRoleId" v-for="(item, index) in roleList"
+                :key="index"></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="网点" prop="adminWebsitId">
+            <el-cascader style="width: 100%" :options="departmentList"
+              :props="{ checkStrictly: true, value: 'websitId', label: 'name' }" v-model="addForm.adminWebsitId"
+              clearable>
+            </el-cascader>
+          </el-form-item>
+          <el-form-item label="密码" prop="newPassword">
+            <el-input v-model="addForm.newPassword" ref="password1" autocomplete="off" placeholder="请输入密码"
+              :type="passwordType1"></el-input>
+            <span class="show-pwd" @click="showPwd(1)">
+              <svg-icon :icon-class="passwordType1 === 'password' ? 'eye' : 'eye-open'" />
+            </span>
+          </el-form-item>
+          <el-form-item label="确认密码" prop="confirmPassword">
+            <el-input v-model="addForm.confirmPassword" ref="password2" autocomplete="off" placeholder="请再次输入密码"
+              :type="passwordType2"></el-input>
+            <span class="show-pwd" @click="showPwd(2)">
+              <svg-icon :icon-class="passwordType2 === 'password' ? 'eye' : 'eye-open'" />
+            </span>
+          </el-form-item>
+          <el-form-item label="是否公众号通知" prop="pubNotice">
+            <el-switch v-model="addForm.pubNotice" active-color="#13ce66" inactive-color="#ff4949">
+            </el-switch>
+          </el-form-item>
+        </el-form>
+        <div slot="footer" class="dialog-footer">
+          <el-button @click="data.removeTab()">取 消</el-button>
+          <el-button type="primary" @click="submitAddForm(data.removeTab)">确 定</el-button>
         </div>
       </div>
-    </div>
-
-    <!-- 重置密码 -->
-    <el-dialog title="重置密码" :visible.sync="resetFormVisible" :show-close="false" width="40%"
-      :close-on-click-modal="false">
-      <el-form ref="resetForm" :model="resetForm" :rules="resetFormRules" label-position="left" label-width="100px">
-        <el-form-item label="输入新密码" prop="newPassword">
-          <el-input v-model="resetForm.newPassword" ref="password1" autocomplete="off" placeholder="请输入新密码"
-            :type="passwordType1"></el-input>
-          <span class="show-pwd" @click="showPwd(1)">
-            <svg-icon :icon-class="passwordType1 === 'password' ? 'eye' : 'eye-open'" />
-          </span>
-        </el-form-item>
-        <el-form-item label="确认密码" prop="confirmPassword">
-          <el-input v-model="resetForm.confirmPassword" ref="password2" autocomplete="off" placeholder="请再次输入新密码"
-            :type="passwordType2"></el-input>
-          <span class="show-pwd" @click="showPwd(2)">
-            <svg-icon :icon-class="passwordType2 === 'password' ? 'eye' : 'eye-open'" />
-          </span>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button @click="cancelResetForm">取 消</el-button>
-        <el-button type="primary" @click="submitResetForm">确 定</el-button>
-      </div>
-    </el-dialog>
-
-    <!-- 新增编辑账户 -->
-    <el-dialog :title="addFormType == 'add' ? '新增账户' : '编辑账户'" :visible.sync="addFormVisible" :show-close="false"
-      width="500px" :close-on-click-modal="false">
-      <el-form ref="addForm" :model="addForm" :rules="addFormRules" label-position="left" label-width="120px">
-        <el-form-item label="账号" prop="account">
-          <el-input v-model="addForm.account" autocomplete="off" placeholder="请输入账号"></el-input>
-        </el-form-item>
-        <el-form-item label="用户名" prop="nickName">
-          <el-input v-model="addForm.nickName" autocomplete="off" placeholder="请输入用户名"></el-input>
-        </el-form-item>
-        <el-form-item label="手机号" prop="linkPhone">
-          <el-input v-model="addForm.linkPhone" autocomplete="off" placeholder="请输入手机号"></el-input>
-        </el-form-item>
-        <el-form-item label="角色组" prop="role">
-          <el-select v-model="addForm.role" placeholder="请选择角色组" style="width: 100%;">
-            <el-option :label="item.name" :value="item.adminRoleId" v-for="(item, index) in roleList"
-              :key="index"></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="网点" prop="adminWebsitId">
-          <el-cascader style="width: 100%" :options="departmentList"
-            :props="{ checkStrictly: true, value: 'websitId', label: 'name' }" v-model="addForm.adminWebsitId" clearable>
-          </el-cascader>
-        </el-form-item>
-        <el-form-item label="密码" prop="newPassword">
-          <el-input v-model="addForm.newPassword" ref="password1" autocomplete="off" placeholder="请输入密码"
-            :type="passwordType1"></el-input>
-          <span class="show-pwd" @click="showPwd(1)">
-            <svg-icon :icon-class="passwordType1 === 'password' ? 'eye' : 'eye-open'" />
-          </span>
-        </el-form-item>
-        <el-form-item label="确认密码" prop="confirmPassword">
-          <el-input v-model="addForm.confirmPassword" ref="password2" autocomplete="off" placeholder="请再次输入密码"
-            :type="passwordType2"></el-input>
-          <span class="show-pwd" @click="showPwd(2)">
-            <svg-icon :icon-class="passwordType2 === 'password' ? 'eye' : 'eye-open'" />
-          </span>
-        </el-form-item>
-        <el-form-item label="是否公众号通知" prop="pubNotice">
-          <el-switch v-model="addForm.pubNotice" active-color="#13ce66" inactive-color="#ff4949">
-          </el-switch>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button @click="cancelAddForm">取 消</el-button>
-        <el-button type="primary" @click="submitAddForm">确 定</el-button>
+      <div v-if="~['resetpassword'].indexOf(activeKey)" style="box-sizing: border-box;padding: 16px;">
+        <el-form ref="resetForm" :model="resetForm" :rules="resetFormRules" label-position="left" label-width="100px">
+          <el-form-item label="输入新密码" prop="newPassword">
+            <el-input v-model="resetForm.newPassword" ref="password1" autocomplete="off" placeholder="请输入新密码"
+              :type="passwordType1"></el-input>
+            <span class="show-pwd" @click="showPwd(1)">
+              <svg-icon :icon-class="passwordType1 === 'password' ? 'eye' : 'eye-open'" />
+            </span>
+          </el-form-item>
+          <el-form-item label="确认密码" prop="confirmPassword">
+            <el-input v-model="resetForm.confirmPassword" ref="password2" autocomplete="off" placeholder="请再次输入新密码"
+              :type="passwordType2"></el-input>
+            <span class="show-pwd" @click="showPwd(2)">
+              <svg-icon :icon-class="passwordType2 === 'password' ? 'eye' : 'eye-open'" />
+            </span>
+          </el-form-item>
+        </el-form>
+        <div slot="footer" class="dialog-footer">
+          <el-button @click="data.removeTab()">取 消</el-button>
+          <el-button type="primary" @click="submitResetForm(data.removeTab)">确 定</el-button>
+        </div>
       </div>
-    </el-dialog>
-
-  </div>
+    </template>
+  </zj-tab-page>
 </template>
 
 <script>
@@ -216,9 +216,7 @@ export default {
         children: 'children',
       },
       merchantList: [], // 商户列表
-
       resetId: null,
-      resetFormVisible: false,
       resetForm: {
         newPassword: '', // 新密码
         confirmPassword: '', // 确认密码
@@ -231,10 +229,8 @@ export default {
           { required: true, validator: validatePass2, trigger: 'blur' }
         ],
       },
-
       editId: null,
       addFormType: 'add',
-      addFormVisible: false,
       addForm: {
         account: '', // 账号
         nickName: '', // 用户名
@@ -243,7 +239,7 @@ export default {
         newPassword: '', // 新密码
         confirmPassword: '', // 确认密码
         pubNotice: true,
-        linkPhone:"",
+        linkPhone: "",
       },
       addFormRules: {
         account: [
@@ -268,7 +264,6 @@ export default {
           { required: true, validator: validatePass4, trigger: 'blur' }
         ],
       },
-
       passwordType1: 'password',
       passwordType2: 'password',
     }
@@ -394,20 +389,31 @@ export default {
 
     // 重置密码
     handleReset(id) {
-      this.resetId = id;
-      this.resetFormVisible = true;
+      this.$refs.tabPage.addTab({
+				activeKey: "resetpassword",
+				key: "resetpassword",
+				label: "重置密码",
+				triggerEvent: () => {
+					this.cancelResetForm()
+					this.$nextTick(() => {
+						this.resetId = id;
+					})
+				},
+				closeEvent: () => {
+          this.cancelResetForm()
+				}
+			})
     },
 
     // 取消重置密码
     cancelResetForm() {
-      this.resetFormVisible = false;
       this.passwordType1 = 'password';
       this.passwordType2 = 'password';
-      this.$refs.resetForm.resetFields();
+      this.$refs?.resetForm?.resetFields();
     },
 
     // 提交重置密码
-    submitResetForm() {
+    submitResetForm(removeTab) {
       this.$refs.resetForm.validate((valid) => {
         if (valid) {
           let params = {
@@ -415,7 +421,7 @@ export default {
             adminUserId: this.resetId
           }
           resetPassword(params).then(res => {
-            this.cancelResetForm();
+            removeTab('list');
             this.getList();
             this.$successMsg();
           })
@@ -425,35 +431,44 @@ export default {
 
     // 新增编辑 账户
     async addOrEdit(type, id) {
-      this.addFormType = type;
-      this.addFormVisible = true;
-      this.departmentList = await this.getDepartmentList();
-
-      if (type == 'edit') {
-        this.editId = id;
-        getUserInfo({ adminUserId: id }).then(res => {
-          this.addForm = {
-            account: res.data.userName,
-            role: res.data.roleId,
-            nickName: res.data.nickName,
-            pubNotice: res.data.pubNotice,
-            adminWebsitId: res.data.adminWebsitId,
-            linkPhone: res.data.linkPhone
+      this.$refs.tabPage.addTab({
+				activeKey: type,
+        key: type,
+        label: ({ add: "新增", edit: "编辑" })[type],
+				triggerEvent: async () => {
+          this.cancelAddForm()
+					this.addFormType = type;
+          this.departmentList = await this.getDepartmentList();
+          if (type == 'edit') {
+            this.editId = id;
+            getUserInfo({ adminUserId: id }).then(res => {
+              this.addForm = {
+                account: res.data.userName,
+                role: res.data.roleId,
+                nickName: res.data.nickName,
+                pubNotice: res.data.pubNotice,
+                adminWebsitId: res.data.adminWebsitId,
+                linkPhone: res.data.linkPhone
+              }
+            })
           }
-        })
-      }
+				},
+				closeEvent: () => {
+          
+				}
+			})
     },
 
     // 取消 新增编辑账户
     cancelAddForm() {
-      this.addFormVisible = false;
       this.passwordType1 = 'password';
       this.passwordType2 = 'password';
-      this.$refs.addForm.resetFields();
+      this.$refs?.addForm?.resetFields();
+      this.$data.addForm = this.$options.data().addForm
     },
 
     // 提交 新增编辑账户
-    submitAddForm() {
+    submitAddForm(removeTab) {
       this.$refs.addForm.validate((valid) => {
         if (valid) {
           let adminWebsitId = null
@@ -474,13 +489,13 @@ export default {
           if (this.addFormType == 'edit') {
             params.adminUserId = this.editId;
             editAccount(params).then(res => {
-              this.cancelAddForm();
+              removeTab('list');
               this.getList();
               this.$successMsg('编辑成功');
             })
           } else {
             addAccount(params).then(res => {
-              this.cancelAddForm();
+              removeTab('list');
               this.getList();
               this.$successMsg('新增成功');
             })

+ 116 - 54
src/views/setting/notification/announcement/index.vue

@@ -1,40 +1,50 @@
 <template>
-	<template-page ref="pageRef" :get-list="getList" :table-attributes="tableAttributes" :table-events="tableEvents"
-		:operationColumnWidth="120" :options-evens-group="optionsEvensGroup" :moreParameters="moreParameters"
-		:column-parsing="columnParsing" :operation="operation" :exportList="exportList">
-		<div slot="moreSearch">
-			<el-radio-group v-model="status" size="mini" @change="changeType">
-				<el-radio-button label="">全部</el-radio-button>
-				<el-radio-button label="NO">未发布</el-radio-button>
-				<el-radio-button label="YES">已发布</el-radio-button>
-			</el-radio-group>
-			<br><br>
-		</div>
-		<el-dialog title="" width="800px" custom-class="diy-dialog" append-to-body :modal="true" :visible.sync="formDialog"
-			:show-close="true" :close-on-click-modal="false" :modal-append-to-body="false" :before-close="formCancel">
-			<zj-form-container ref="formRef" :form-data="formData" :styleSwitch="false">
-				<zj-form-module :title="formDialogTitles[formDialogType]" label-width="100px" :showPackUp="false"
-					:form-data="formData" :form-items="formItems">
-				</zj-form-module>
-			</zj-form-container>
-			<div slot="footer" class="dialog-footer">
-				<el-button size="mini" @click="formCancel">取 消</el-button>
-				<el-button v-if="formDialogType < 2" size="mini" type="primary" @click="formConfirm('NO')">保存</el-button>
-				<el-button v-if="formDialogType < 2" size="mini" type="primary" @click="formConfirm('YES')">发布</el-button>
+	<zj-tab-page ref="tabPage" :defaultActives="[{ key: 'list', label: '列表页面', essential: true }]">
+		<template slot-scope="{activeKey, data}">
+			<div :style="{
+				width: '100%',
+				height: activeKey == 'list' ? '100%' : '0px',
+				overflow: 'hidden'
+			}">
+				<template-page ref="pageRef" :get-list="getList" :table-attributes="tableAttributes" :table-events="tableEvents"
+					:operationColumnWidth="200" :options-evens-group="optionsEvensGroup" :moreParameters="moreParameters"
+					:column-parsing="columnParsing" :operation="operation" :exportList="exportList">
+					<div slot="moreSearch">
+						<el-radio-group v-model="status" size="mini" @change="changeType">
+							<el-radio-button label="">全部</el-radio-button>
+							<el-radio-button label="NO">未发布</el-radio-button>
+							<el-radio-button label="YES">已发布</el-radio-button>
+						</el-radio-group>
+						<br><br>
+					</div>
+				</template-page>
 			</div>
-		</el-dialog>
-		<el-dialog title="" width="500px" custom-class="diy-dialog" append-to-body :modal="true" :visible.sync="formDialog2"
-			:show-close="true" :close-on-click-modal="false" :modal-append-to-body="false" :before-close="formCancel">
-			<zj-form-container ref="formRef" :form-data="formData" :styleSwitch="false">
-				<zj-form-module :title="formDialogTitles[formDialogType]" label-width="100px" :showPackUp="false"
-					:form-data="formData" :form-items="formItems2">
-				</zj-form-module>
-			</zj-form-container>
-			<div slot="footer" class="dialog-footer">
-				<el-button size="mini" @click="formCancel">取 消</el-button>
+			<div v-if="~['add', 'edit'].indexOf(activeKey)" style="box-sizing: border-box;padding: 16px;">
+				<zj-form-container ref="formRef" :form-data="formData" :styleSwitch="false">
+					<zj-form-module :title="data.label" label-width="100px" :showPackUp="false" :form-data="formData"
+						:form-items="formItems">
+					</zj-form-module>
+				</zj-form-container>
+				<div slot="footer" class="dialog-footer">
+					<el-button size="mini" @click="data.removeTab()">取 消</el-button>
+					<el-button v-if="formDialogType < 2" size="mini" type="primary"
+						@click="formConfirm('NO', data.removeTab)">保存</el-button>
+					<el-button v-if="formDialogType < 2" size="mini" type="primary"
+						@click="formConfirm('YES', data.removeTab)">发布</el-button>
+				</div>
 			</div>
-		</el-dialog>
-	</template-page>
+			<div v-if="~['detail'].indexOf(activeKey)" style="box-sizing: border-box;padding: 16px;">
+				<zj-form-container ref="formRef" :form-data="formData" :styleSwitch="false">
+					<zj-form-module :title="data.label" label-width="100px" :showPackUp="false" :form-data="formData"
+						:form-items="formItems2">
+					</zj-form-module>
+				</zj-form-container>
+				<div slot="footer" class="dialog-footer">
+					<el-button size="mini" @click="data.removeTab()">取 消</el-button>
+				</div>
+			</div>
+		</template>
+	</zj-tab-page>
 </template>
 
 <script>
@@ -75,9 +85,6 @@ export default {
 			recordSelected: [],
 			/** 表单变量 */
 			formDialogType: 0,
-			formDialogTitles: ["新增", "编辑", "详情"],
-			formDialog: false,
-			formDialog2: false,
 			formData: {
 				type: "A",
 				title: "",
@@ -289,9 +296,9 @@ export default {
 			}]
 		}
 	},
-	created(){
-		if(this.$route.query.id){
-			this.getNoticeDetail(this.$route.query.id,2,'formDialog2')
+	created() {
+		if (this.$route.query.id) {
+			this.getNoticeDetail(this.$route.query.id, 2, 'formDialog2')
 		}
 	},
 	methods: {
@@ -321,7 +328,7 @@ export default {
 		selectionChange(data) {
 			this.recordSelected = data
 		},
-		getNoticeDetail(noticeId,type,name){
+		getNoticeDetail(noticeId, type, name) {
 			getNoticeDetail({
 				noticeId
 			}).then(res => {
@@ -340,10 +347,58 @@ export default {
 		operation(h, { row, index, column }) {
 			return (<div class='operation-btns'>
 				{row.status == "NO" ? <el-button type="text" onClick={() => {
-					this.getNoticeDetail(row.noticeId,1,'')
+					this.$refs.tabPage.addTab({
+						activeKey: "edit",
+						key: "edit",
+						label: "编辑",
+						triggerEvent: () => {
+							this.formCancel()
+							this.$nextTick(() => {
+								getNoticeDetail({
+									noticeId: row.noticeId
+								}).then(res => {
+									Object.assign(this.formData, res.data, {
+										files: res.data.files ? res.data.files.map(item => ({
+											...item,
+											size: item.fileSize,
+											type: item.fileType,
+										})) : []
+									})
+									this.formDialogType = 1
+									this.openForm()
+								})
+							})
+						},
+						closeEvent: () => {
+						}
+					})
 				}}>编辑</el-button> : null}
 				<el-button type="text" onClick={() => {
-					this.getNoticeDetail(row.noticeId,2,'formDialog2')
+					this.$refs.tabPage.addTab({
+						activeKey: "detail",
+						key: "detail",
+						label: "查看",
+						triggerEvent: () => {
+							this.formCancel()
+							this.$nextTick(() => {
+								getNoticeDetail({
+									noticeId: row.noticeId
+								}).then(res => {
+									Object.assign(this.formData, res.data, {
+										files: res.data.files ? res.data.files.map(item => ({
+											...item,
+											size: item.fileSize,
+											type: item.fileType,
+										})) : []
+									})
+									this.formDialogType = 2
+									this.openForm()
+								})
+							})
+						},
+						closeEvent: () => {
+						}
+					})
 				}}>查看</el-button>
 				{row.status == "NO" ? <el-popconfirm
 					title={`是否确定删除?`}
@@ -372,31 +427,38 @@ export default {
 			</div>)
 		},
 		addData() {
-			this.formDialogType = 0
-			this.openForm()
+			this.$refs.tabPage.addTab({
+				activeKey: "add",
+				key: "add",
+				label: "新增",
+				triggerEvent: () => {
+					this.formCancel()
+					this.$nextTick(() => {
+						this.formDialogType = 0
+						this.openForm()
+					})
+				},
+				closeEvent: () => {
+				}
+			})
 		},
-		openForm(key = 'formDialog') {
+		openForm() {
 			if (JSON.parse(localStorage.getItem("greemall_user")).type == 2) {
 				getListaa({ pageNum: 1, pageSize: -1, type: 1 }).then((res) => {
 					this.websitList = res.data.records
-					this[key] = true;
 				})
 			} else {
 				getMemberList({ "pageNum": 1, "pageSize": -1, type: "WORKER" }).then(res => {
-					console.log(res.data.records)
 					this.workerList = res.data.records
-					this[key] = true;
 				})
 			}
 		},
 		formCancel() {
-			this.$refs.formRef.$refs.inlineForm.clearValidate()
+			this.$refs?.formRef?.$refs?.inlineForm?.clearValidate()
 			this.$data.formData = this.$options.data().formData
-			this.formDialog = false
-			this.formDialog2 = false
 			this.websitList = []
 		},
-		formConfirm(status) {
+		formConfirm(status, removeTab) {
 			this.$refs.formRef.validate((valid, invalidFields, errLabels) => {
 				if (valid) {
 					[noticeAdd, noticeUpdate][this.formDialogType]({
@@ -412,7 +474,7 @@ export default {
 							type: 'success',
 							message: status == "YES" ? '发送成功!' : '保存成功!'
 						})
-						this.formCancel()
+						removeTab('list')
 						this.$refs.pageRef.refreshList()
 					})
 				}

+ 50 - 36
src/views/setting/notification/systemMessage/index.vue

@@ -1,19 +1,28 @@
 <template>
-	<template-page ref="pageRef" :get-list="getList" :table-attributes="tableAttributes" :table-events="tableEvents"
-		:operationColumnWidth="200" :options-evens-group="optionsEvensGroup" :moreParameters="moreParameters"
-		:column-parsing="columnParsing" :operation="operation" :exportList="exportList">
-		<el-dialog title="" width="500px" custom-class="diy-dialog" append-to-body :modal="true" :visible.sync="formDialog2"
-			:show-close="true" :close-on-click-modal="false" :modal-append-to-body="false" :before-close="formCancel">
-			<zj-form-container ref="formRef" :form-data="formData" :styleSwitch="false">
-				<zj-form-module :title="formDialogTitles[formDialogType]" label-width="100px" :showPackUp="false"
-					:form-data="formData" :form-items="formItems2">
-				</zj-form-module>
-			</zj-form-container>
-			<div slot="footer" class="dialog-footer">
-				<el-button size="mini" @click="formCancel">取 消</el-button>
+	<zj-tab-page ref="tabPage" :defaultActives="[{ key: 'list', label: '列表页面', essential: true }]">
+		<template slot-scope="{activeKey, data}">
+			<div :style="{
+				width: '100%',
+				height: activeKey == 'list' ? '100%' : '0px',
+				overflow: 'hidden'
+			}">
+				<template-page ref="pageRef" :get-list="getList" :table-attributes="tableAttributes" :table-events="tableEvents"
+					:operationColumnWidth="200" :options-evens-group="optionsEvensGroup" :moreParameters="moreParameters"
+					:column-parsing="columnParsing" :operation="operation" :exportList="exportList">
+				</template-page>
 			</div>
-		</el-dialog>
-	</template-page>
+			<div v-if="~['detail'].indexOf(activeKey)" style="box-sizing: border-box;padding: 16px;">
+				<zj-form-container ref="formRef" :form-data="formData" :styleSwitch="false">
+					<zj-form-module :title="data.label" label-width="100px" :showPackUp="false" :form-data="formData"
+						:form-items="formItems2">
+					</zj-form-module>
+				</zj-form-container>
+				<div slot="footer" class="dialog-footer">
+					<el-button size="mini" @click="data.removeTab()">取 消</el-button>
+				</div>
+			</div>
+		</template>
+	</zj-tab-page>
 </template>
 
 <script>
@@ -44,9 +53,6 @@ export default {
 			recordSelected: [],
 			/** 表单变量 */
 			formDialogType: 0,
-			formDialogTitles: ["新增", "编辑", "详情"],
-			formDialog: false,
-			formDialog2: false,
 			formData: {
 				type: "A",
 				title: "",
@@ -129,7 +135,7 @@ export default {
 	},
 	methods: {
 		// 列表请求函数
-		getList:noticeListPageV2,
+		getList: noticeListPageV2,
 		// 列表导出函数
 		exportList: noticePageExport,
 		// 表格列解析渲染数据更改
@@ -144,40 +150,48 @@ export default {
 		operation(h, { row, index, column }) {
 			return (<div class='operation-btns'>
 				<el-button type="text" onClick={() => {
-					getNoticeDetail({
-						noticeId: row.noticeId
-					}).then(res => {
-						Object.assign(this.formData, res.data, {
-							files: res.data.files ? res.data.files.map(item => ({
-								...item,
-								size: item.fileSize,
-								type: item.fileType,
-							})) : []
-						})
-						this.formDialogType = 2
-						this.openForm('formDialog2')
+					this.$refs.tabPage.addTab({
+						activeKey: "detail",
+						key: "detail",
+						label: "查看",
+						triggerEvent: () => {
+							this.formCancel()
+							this.$nextTick(() => {
+								getNoticeDetail({
+									noticeId: row.noticeId
+								}).then(res => {
+									Object.assign(this.formData, res.data, {
+										files: res.data.files ? res.data.files.map(item => ({
+											...item,
+											size: item.fileSize,
+											type: item.fileType,
+										})) : []
+									})
+									this.formDialogType = 2
+									this.openForm()
+								})
+							})
+						},
+						closeEvent: () => {
+						}
 					})
 				}}>查看</el-button>
 			</div>)
 		},
-		openForm(key = 'formDialog') {
+		openForm() {
 			if (JSON.parse(localStorage.getItem("greemall_user")).type == 2) {
 				getListaa({ pageNum: 1, pageSize: -1, type: 1 }).then((res) => {
 					this.websitList = res.data.records
-					this[key] = true;
 				})
 			} else {
 				memberListPageV2({ "pageNum": 1, "pageSize": -1, "params": [] }).then(res => {
 					this.workerList = res.data.records
-					this[key] = true;
 				})
 			}
 		},
 		formCancel() {
-			this.$refs.formRef.$refs.inlineForm.clearValidate()
+			this.$refs?.formRef?.$refs?.inlineForm?.clearValidate()
 			this.$data.formData = this.$options.data().formData
-			this.formDialog = false
-			this.formDialog2 = false
 			this.websitList = []
 		},
 	}

+ 116 - 112
src/views/setting/role/index.vue

@@ -1,74 +1,73 @@
 <template>
-  <div class="app-container">
-    <div class="setting_title">权限管理</div>
-    <el-divider></el-divider>
-
-    <div class="mymain-container">
-      <div class="btn-group clearfix">
-        <div class="fl">
-          <el-button size="small" type="primary" icon="el-icon-plus" @click="addOrEdit('add')">新增角色</el-button>
-        </div>
-        <div class="fr">
+  <zj-tab-page ref="tabPage" :defaultActives="[{ key: 'list', label: '列表页面', essential: true }]">
+    <template slot-scope="{activeKey, data}">
+      <div :style="{
+        width: '100%',
+        height: activeKey == 'list' ? '100%' : '0px',
+        overflow: 'hidden'
+      }">
+        <div class="app-container">
+          <div class="setting_title">权限管理</div>
+          <el-divider></el-divider>
+          <div class="mymain-container">
+            <div class="btn-group clearfix">
+              <div class="fl">
+                <el-button size="small" type="primary" icon="el-icon-plus" @click="addOrEdit('add')">新增角色</el-button>
+              </div>
+              <div class="fr">
+              </div>
+            </div>
+            <div class="table">
+              <el-table v-loading="listLoading" :data="dataList" element-loading-text="Loading" border fit
+                highlight-current-row stripe>
+                <el-table-column align="center" label="序号" type="index" width="50"></el-table-column>
+                <el-table-column align="center" label="角色" prop="name"></el-table-column>
+                <el-table-column align="center" label="操作" width="180">
+                  <template slot-scope="scope">
+                    <el-button type="text" @click="setMenuRole(scope.row.adminRoleId)">设置权限</el-button>
+                    <el-button type="text" @click="addOrEdit('edit', scope.row.adminRoleId)"
+                      v-if="scope.row.adminRoleId != 1">编辑</el-button>
+                    <el-popconfirm style="margin-left: 10px;" title="确定删除吗?"
+                      @confirm="handleDelete(scope.row.adminRoleId)" v-if="scope.row.adminRoleId != 1">
+                      <el-button slot="reference" type="text">删除</el-button>
+                    </el-popconfirm>
+                  </template>
+                </el-table-column>
+              </el-table>
+            </div>
+            <div class="pagination clearfix">
+              <div class="fr">
+                <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
+                  :current-page="currentPage" :page-sizes="[10, 20, 30, 50]" :page-size="10"
+                  layout="total, sizes, prev, pager, next, jumper" :total="listTotal">
+                </el-pagination>
+              </div>
+            </div>
+          </div>
         </div>
       </div>
-
-      <div class="table">
-        <el-table v-loading="listLoading" :data="dataList" element-loading-text="Loading" border fit highlight-current-row
-          stripe>
-          <el-table-column align="center" label="序号" type="index" width="50"></el-table-column>
-          <el-table-column align="center" label="角色" prop="name"></el-table-column>
-          <el-table-column align="center" label="操作" width="180">
-            <template slot-scope="scope">
-              <el-button type="text" @click="setMenuRole(scope.row.adminRoleId)">设置权限</el-button>
-              <el-button type="text" @click="addOrEdit('edit', scope.row.adminRoleId)"
-                v-if="scope.row.adminRoleId != 1">编辑</el-button>
-              <el-popconfirm style="margin-left: 10px;" title="确定删除吗?" @confirm="handleDelete(scope.row.adminRoleId)"
-                v-if="scope.row.adminRoleId != 1">
-                <el-button slot="reference" type="text">删除</el-button>
-              </el-popconfirm>
-            </template>
-          </el-table-column>
-        </el-table>
-      </div>
-
-      <div class="pagination clearfix">
-        <div class="fr">
-          <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="currentPage"
-            :page-sizes="[10, 20, 30, 50]" :page-size="10" layout="total, sizes, prev, pager, next, jumper"
-            :total="listTotal">
-          </el-pagination>
+      <div v-if="~['add', 'edit'].indexOf(activeKey)" style="box-sizing: border-box;padding: 16px;">
+        <el-form ref="addForm" :model="addForm" :rules="addFormRules" label-position="left" label-width="100px">
+          <el-form-item label="角色名" prop="name">
+            <el-input v-model="addForm.name" autocomplete="off" placeholder="请输入角色名"></el-input>
+          </el-form-item>
+        </el-form>
+        <div slot="footer" class="dialog-footer">
+          <el-button size="mini" @click="data.removeTab()">取 消</el-button>
+          <el-button size="mini" type="primary" @click="submitAddForm(data.removeTab)">确 定</el-button>
         </div>
       </div>
-    </div>
-
-    <!-- 新增编辑 -->
-    <el-dialog :title="addFormType == 'add' ? '新增角色' : '编辑角色'" :visible.sync="addFormVisible" :show-close="false"
-      width="40%" :close-on-click-modal="false">
-      <el-form ref="addForm" :model="addForm" :rules="addFormRules" label-position="left" label-width="100px">
-        <el-form-item label="角色名" prop="name">
-          <el-input v-model="addForm.name" autocomplete="off" placeholder="请输入角色名"></el-input>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button @click="cancelAddForm">取 消</el-button>
-        <el-button type="primary" @click="submitAddForm">确 定</el-button>
-      </div>
-    </el-dialog>
-
-    <!-- 设置权限 -->
-    <el-dialog title="设置权限" :visible.sync="roleFormVisible" :show-close="false" width="1000" :close-on-click-modal="false"
-      custom-class="tree-dialog" top="50px">
-      <!-- :check-strictly="true" -->
-      <zj-tree :data="menuRoleList" show-checkbox :default-expand-all="true" node-key="moduleId" ref="tree"
-        highlight-current :props="defaultProps">
-      </zj-tree>
-      <div slot="footer" class="dialog-footer">
-        <el-button @click="roleFormVisible = false">{{ editId != 1 ? '取 消' : '关 闭' }}</el-button>
-        <el-button type="primary" @click="submitRoleForm" v-if="editId != 1">确 定</el-button>
+      <div v-if="~['detail'].indexOf(activeKey)" style="box-sizing: border-box;padding: 16px;">
+        <zj-tree :data="menuRoleList" show-checkbox :default-expand-all="true" node-key="moduleId" ref="tree"
+          highlight-current :props="defaultProps">
+        </zj-tree>
+        <div slot="footer" class="dialog-footer">
+          <el-button size="mini" @click="data.removeTab()">{{ editId != 1 ? '取 消' : '关 闭' }}</el-button>
+          <el-button size="mini" type="primary" @click="submitRoleForm(data.removeTab)" v-if="editId != 1">确 定</el-button>
+        </div>
       </div>
-    </el-dialog>
-
-  </div>
+    </template>
+  </zj-tab-page>
 </template>
 
 <script>
@@ -84,10 +83,8 @@ export default {
       currentPage: 1, // 当前页码
       pageSize: 10, // 每页数量
       listTotal: 0, // 列表总数
-
       editId: null,
       addFormType: 'add',
-      addFormVisible: false,
       addForm: {
         name: '', // 角色名
       },
@@ -96,9 +93,6 @@ export default {
           { required: true, message: '请输入角色名', trigger: 'blur' }
         ],
       },
-
-      roleFormVisible: false,
-
       menuRoleList: [],
       defaultProps: {
         children: 'children',
@@ -118,12 +112,10 @@ export default {
   methods: {
     getList() {
       this.listLoading = true;
-
       let params = {
         pageNum: this.currentPage,
         pageSize: this.pageSize
       };
-
       getRoleList(params).then(res => {
         this.dataList = res.data.records;
         this.listTotal = res.data.total;
@@ -154,26 +146,30 @@ export default {
 
     // 新增编辑
     addOrEdit(type, id) {
-      this.addFormType = type;
-      this.addFormVisible = true;
-      if (type == 'edit') {
-        this.editId = id;
-        getRoleDetail({ adminRoleId: id }).then(res => {
-          this.addForm = {
-            name: res.data.name
+      this.$refs.tabPage.addTab({
+        activeKey: type,
+        key: type,
+        label: ({ add: "新增", edit: "编辑" })[type],
+        triggerEvent: () => {
+          this.$refs?.addForm?.resetFields();
+          this.$data.addForm = this.$options.data().addForm
+          this.addFormType = type;
+          if (type == 'edit') {
+            this.editId = id;
+            getRoleDetail({ adminRoleId: id }).then(res => {
+              this.addForm = {
+                name: res.data.name
+              }
+            })
           }
-        })
-      }
-    },
-
-    // 取消 新增编辑
-    cancelAddForm() {
-      this.addFormVisible = false;
-      this.$refs.addForm.resetFields();
+        },
+        closeEvent: () => {
+        }
+      })
     },
 
     // 提交 新增编辑
-    submitAddForm() {
+    submitAddForm(removeTab) {
       this.$refs.addForm.validate((valid) => {
         if (valid) {
           let params = {
@@ -182,13 +178,13 @@ export default {
           if (this.addFormType == 'edit') {
             params.adminRoleId = this.editId;
             editRole(params).then(res => {
-              this.cancelAddForm();
+              removeTab('list');
               this.getList();
               this.$successMsg('编辑成功');
             })
           } else {
             addRole(params).then(res => {
-              this.cancelAddForm();
+              removeTab('list');
               this.getList();
               this.$successMsg('新增成功');
             })
@@ -199,39 +195,47 @@ export default {
 
     // 设置权限 - 获取列表
     setMenuRole(id) {
-      this.roleFormVisible = true;
-      this.editId = id;
-
-      function aaa(list){
-        for(var item of list){
-          if(item.type==3){
-            item.tiling = true
-            item.labelWidthNum = 115
-          }
-          if(item.children && item.children.length){
-            aaa(item.children)
-          }
+      this.$refs.tabPage.addTab({
+        activeKey: "detail",
+        key: "detail",
+        label: "设置权限",
+        triggerEvent: () => {
+          this.$nextTick(() => {
+            this.editId = id;
+            function aaa(list) {
+              for (var item of list) {
+                if (item.type == 3) {
+                  item.tiling = true
+                  item.labelWidthNum = 115
+                }
+                if (item.children && item.children.length) {
+                  aaa(item.children)
+                }
+              }
+            }
+            getMenuList({ adminUserId: this.userid }).then(res => {
+              aaa(res.data);
+              this.menuRoleList = res.data
+            })
+            getMenuRoleIds({ adminRoleId: id }).then(res => {
+              this.$refs.tree.setCheckedKeys(res.data);
+            })
+          })
+        },
+        closeEvent: () => {
         }
-      }
-
-      getMenuList({ adminUserId: this.userid }).then(res => {
-        aaa(res.data);
-        this.menuRoleList = res.data
-      })
-      getMenuRoleIds({ adminRoleId: id }).then(res => {
-        this.$refs.tree.setCheckedKeys(res.data);
       })
     },
 
     // 设置权限 - 提交数据
-    submitRoleForm() {
+    submitRoleForm(removeTab) {
       let params = {
         adminModuleIds: this.$refs.tree.getCheckedKeys(),
         adminModuleIds2: this.$refs.tree.getHalfCheckedKeys(),
         adminRoleId: this.editId,
       }
       setMenuRole(params).then(res => {
-        this.roleFormVisible = false;
+        removeTab('list')
         this.getList();
         this.$successMsg();
       })