Procházet zdrojové kódy

Merge remote-tracking branch 'origin/lin_增值服务' into feature/pyh_批量弹窗页面优化

pengyh před 1 rokem
rodič
revize
605d6fb36a

+ 25 - 0
src/api/announcement.js

@@ -1,5 +1,30 @@
 import request, { postBlob, getBlob, handleImport } from '@/utils/request'
 
+
+export function zfapiNoticeDetail(params) {
+  return request({
+    url: '/notice/detail',
+    method: 'get',
+    params
+  })
+}
+
+export function noticeReadList(data) {
+  return request({
+    url: `/notice/read/list?moduleId=${data.moduleId}`,
+    method: 'post',
+    data
+  })
+}
+
+export function noticeReadListExport(data, name) {
+  return postBlob({
+    url: '/notice/read/list/export',
+    data,
+    name
+  })
+}
+
 // 获取师傅列表
 export function noticeListPageV2(data) {
   return request({

+ 9 - 9
src/components/Shortcut/index.vue

@@ -128,15 +128,15 @@ export default {
     commonCompanywechatGet({ id: this.userInfo.companyWechatId }).then(res => {
       console.log(res)
       this.QRcodeList = []
-      if (res?.data?.qrcode1) {
-        this.QRcodeList.push({
-          codeUrl: res.data.qrcode1,
-          name: "小程序",
-          saleName: "",
-          iosIcon: "https://fw.gd-jxm.com/gateway/pcapi/img/get?key=2023-10/16976801488369080b52c-a1e6-40a0-83f9-8e04f12b494e.jpg",
-          androidIcon: "https://fw.gd-jxm.com/gateway/pcapi/img/get?key=2023-10/1697680143828d678a6e5-307d-47d0-8ee9-1698f100feb4.jpg"
-        })
-      }
+      // if (res?.data?.qrcode1) {
+      //   this.QRcodeList.push({
+      //     codeUrl: res.data.qrcode1,
+      //     name: "小程序",
+      //     saleName: "",
+      //     iosIcon: "https://fw.gd-jxm.com/gateway/pcapi/img/get?key=2023-10/16976801488369080b52c-a1e6-40a0-83f9-8e04f12b494e.jpg",
+      //     androidIcon: "https://fw.gd-jxm.com/gateway/pcapi/img/get?key=2023-10/1697680143828d678a6e5-307d-47d0-8ee9-1698f100feb4.jpg"
+      //   })
+      // }
       if (res?.data?.qrcode2) {
         this.QRcodeList.push({
           codeUrl: res.data.qrcode2,

+ 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('新增成功');
             })

+ 337 - 311
src/views/setting/dataDictionary/index.vue

@@ -1,43 +1,42 @@
 <template>
-  <!-- :exportList="exportList" -->
-	<zj-page-container direction="row">
-		 <div class="catalogue">
-			 <div class="title">类型名称</div>
-		     <zj-page-container>
-		         <zj-page-fill>
-		             <el-tree :data="typeList" :props="defaultProps" default-expand-all :highlight-current="true"
-		                 :expand-on-click-node="false" @node-click="handleNodeClick" current-node-key="ASSIST_UNIT"
-		                 node-key="dictType" ref="listTree"> 
-		             </el-tree>
-		         </zj-page-fill>
-		     </zj-page-container>
-		 </div>
-		 <template-page ref="pageRef" :getList="getList" :columnParsing="columnParsing" :optionsEvensGroup="optionsEvensGroup"
-		   :tableAttributes="tableAttributes" :tableEvents="tableEvents" :operationColumnWidth="160" :operation="operation()" :exportList="exportList">
-		   <!-- <AddDataDictionary :visible="visible" :item="item" @setVisible="bool => {
-		     visible = bool
-		     if (!bool && item) {
-		       item = null
-		     }
-		   }
-		     " @success="() => {
-		   $refs.pageRef.refreshList()
-		 }
-		   " /> -->
-		   <el-dialog title="" width="500px" 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" :disabled="formDialogType==2">
-		       </zj-form-module>
-		     </zj-form-container>
-		     <div slot="footer" class="dialog-footer">
-		   			<el-button size="mini" @click="formCancel">取 消</el-button>
-		   			<el-button size="mini" type="primary" @click="formConfirm()">确定</el-button>
-		     </div>
-		   </el-dialog>
-		 </template-page>
-	</zj-page-container>
+	<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'
+			}">
+				<zj-page-container direction="row">
+					<div class="catalogue">
+						<div class="title">类型名称</div>
+						<zj-page-container>
+							<zj-page-fill>
+								<el-tree :data="typeList" :props="defaultProps" default-expand-all :highlight-current="true"
+									:expand-on-click-node="false" @node-click="handleNodeClick" current-node-key="ASSIST_UNIT"
+									node-key="dictType" ref="listTree">
+								</el-tree>
+							</zj-page-fill>
+						</zj-page-container>
+					</div>
+					<template-page ref="pageRef" :getList="getList" :columnParsing="columnParsing"
+						:optionsEvensGroup="optionsEvensGroup" :tableAttributes="tableAttributes" :tableEvents="tableEvents"
+						:operationColumnWidth="160" :operation="operation()" :exportList="exportList">
+					</template-page>
+				</zj-page-container>
+			</div>
+			<div v-if="~['add', '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="formItems" :disabled="formDialogType == 2">
+					</zj-form-module>
+				</zj-form-container>
+				<div slot="footer" class="dialog-footer">
+					<el-button size="mini" @click="data.removeTab()">取 消</el-button>
+					<el-button size="mini" type="primary" @click="formConfirm(data.removeTab)">确定</el-button>
+				</div>
+			</div>
+		</template>
+	</zj-tab-page>
 </template>
 
 <script>
@@ -48,284 +47,311 @@ import { required } from '@/components/template/rules_verify.js'
 import { commonTemplateDownload } from '@/api/common.js'
 import { getType, getDataDictionaryExport, getDataDictionary, add, edit, del, getDetail, listImport } from '@/api/dataDictionary.js'
 export default {
-  components: {
-    TemplatePage,
-    AddDataDictionary
-  },
-  mixins: [import_mixin],
-  data() {
-    return {
-      // 事件组合
-      optionsEvensGroup: [
-        [
-          [
-            {
-              name: '新增',
-              click: this.addData
-            }
-          ]
-        ],
-		[
-          [
-            {
-              name: '下载导入模板',
-              click: this.handleDownload
-            }
-          ],
-          [
-            {
-              name: '导入模板',
-              render: () => {
-                return this.importButton(listImport, '导入模板')
-              }
-            }
-          ],
-        ]
-      ],
-      // 表格属性
-      tableAttributes: {},
-      // 表格事件
-      tableEvents: {},
-      visible: false,
-      item: null,
-	  dictType: 'ASSIST_UNIT',
-	  dictTypeName: '辅材单位',
-	  typeList: [],
-	  defaultProps: {
-	    children: '',
-	    label: 'remark'
-	  },
-	  /** 表单变量 */
-	  formDialogType: 0,
-	  formDialogTitles: ["新增","编辑", "详情"],
-	  formDialog: false,
-	  formData: {
-	  	companyName: JSON.parse(localStorage.getItem('greemall_user')).companyName,
-		dictType: 'ASSIST_UNIT',
-		dictTypeName: '辅材单位',
-		dictValue: '',
-		status: 'ON',
-		sortNum: '',
-		remark: ''
-	  }
-    }
-  },
-  created() {
-  	this.getType()
-  },
-  computed: {
-	  formItems() {
-	      return [{
-	        md: 24,
-	        isShow: true,
-	        name: 'el-input',
-	        attributes: { placeholder: '请输入', disabled: true },
-	        formItemAttributes: {
-	          label: '所属商户',
-	          prop: 'companyName',
-	          rules: [...required]
-	        },
-	      }, {
-	        md: 24,
-	        isShow: true,
-	        name: 'el-input',
-	        attributes: { placeholder: '请输入', disabled: true },
-	        formItemAttributes: {
-	          label: '类型名称',
-	          prop: 'dictTypeName',
-	          rules: [...required]
-	        },
-	      }, {
-	        md: 24,
-	        isShow: true,
-	        name: 'el-input',
-	        attributes: { placeholder: '请输入' },
-	        formItemAttributes: {
-	          label: '字典值',
-	          prop: 'dictValue',
-	          rules: [...required]
-	        },
-	      }, {
-	        md: 24,
-	        isShow: true,
-	        name: 'slot-component',
-	        attributes: { },
-	        formItemAttributes: {
-	          label: '状态',
-	          prop: 'status',
-	          rules: [...required]
-	        },
-	    	render: (h, { props, onInput }) => {
-	    		var { value } = props
-	    		return (
-	    			<el-radio-group v-model={this.formData.status}>
-	    			    <el-radio disabled={this.formDialogType==2} label="ON">启用</el-radio>
-	    			    <el-radio disabled={this.formDialogType==2} label="OFF">禁用</el-radio>
-	    			</el-radio-group>
-	    		)
-	    	}
-		},{
-	        md: 24,
-	        isShow: true,
-	        name: 'el-input',
-	        attributes: { placeholder: '请输入' },
-	        formItemAttributes: {
-	          label: '排序',
-	          prop: 'sortNum',
-	          rules: []
-	        },
-		}, {
-        md: 24,
-        isShow: true,
-        name: 'el-input',
-        attributes: { placeholder: '请输入备注内容',type: "textarea", rows: 3 },
-        formItemAttributes: {
-          label: '备注',
-          prop: 'remark',
-          rules: []
-        }
-      }]
-	  }
-  },
-  methods: {
-    // 列表请求函数
-	getList(p) {
-	  try {
-	    var pam = JSON.parse(JSON.stringify(p))
-	    if (this.dictType) {
-	      pam.params.push({ "param": "a.dict_type", "compare": "=", "value": this.dictType })
-	    }
-	    return getDataDictionary(pam)
-	  } catch (error) {
-	    console.log(error)
-	  }
+	components: {
+		TemplatePage,
+		AddDataDictionary
 	},
-    // 列表导出函数
-    exportList: getDataDictionaryExport,
-	getType(){
-		getType().then(res => {
-			this.typeList = res.data
-		    this.$refs.pageRef.refreshList()
-		})
+	mixins: [import_mixin],
+	data() {
+		return {
+			// 事件组合
+			optionsEvensGroup: [
+				[
+					[
+						{
+							name: '新增',
+							click: this.addData
+						}
+					]
+				],
+				[
+					[
+						{
+							name: '下载导入模板',
+							click: this.handleDownload
+						}
+					],
+					[
+						{
+							name: '导入模板',
+							render: () => {
+								return this.importButton(listImport, '导入模板')
+							}
+						}
+					],
+				]
+			],
+			// 表格属性
+			tableAttributes: {},
+			// 表格事件
+			tableEvents: {},
+			visible: false,
+			item: null,
+			dictType: 'ASSIST_UNIT',
+			dictTypeName: '辅材单位',
+			typeList: [],
+			defaultProps: {
+				children: '',
+				label: 'remark'
+			},
+			/** 表单变量 */
+			formDialogType: 0,
+			formDialogTitles: ["新增", "编辑", "详情"],
+			formData: {
+				companyName: JSON.parse(localStorage.getItem('greemall_user')).companyName,
+				dictType: 'ASSIST_UNIT',
+				dictTypeName: '辅材单位',
+				dictValue: '',
+				status: 'ON',
+				sortNum: '',
+				remark: ''
+			}
+		}
 	},
-	handleNodeClick(e){
-		this.dictType = e.dictType
-		this.formData.dictType = e.dictType
-		this.formData.dictTypeName = e.remark
-		this.dictTypeName = e.remark
-		this.$refs.pageRef.refreshList()
+	created() {
+		this.getType()
 	},
-    // 表格列解析渲染数据更改
-    columnParsing(item, defaultData) {
-      return defaultData
-    },
-    operation() {
-      if (true) {
-        return (h, { row, index, column }) => {
-          return (
-            <div class="operation-btns">
-              {true ? (
-                <zj-button
-                  useLoading={false}
-                  parameter={[row]}
-                  buttonAttributes={{
-                    size: 'mini',
-                    type: 'primary'
-                  }}
-                  buttonEvents={{
-                    click: (...p) => {
-                      var [row] = p
-                      this.formData = row
-                      this.formDialogType = 1
-                      this.openForm()
-                    }
-                  }}
-                >
-                  编辑
-                </zj-button>
-              ) : null}
-              {true ? (
-                <el-popconfirm
-                  icon="el-icon-info"
-                  icon-color="red"
-                  title="这是一段内容确定删除吗?"
-                  onConfirm={() => {
-                    del({ id: row.sysDictId })
-                      .then(res => {
-                        this.$refs.pageRef.refreshList()
-                        this.$message({
-                          type: 'success',
-                          message: `删除成功!`
-                        })
-                      })
-                      .catch(err => {
-                        console.log(err)
-                      })
-                  }}
-                >
-                  <zj-button
-                    slot="reference"
-                    buttonAttributes={{
-                      size: 'mini',
-                      type: 'danger'
-                    }}
-                  >
-                    删除
-                  </zj-button>
-                </el-popconfirm>
-              ) : null}
-            </div>
-          )
-        }
-      }
-      return undefined
-    },
-	addData() {
-	  this.formDialogType = 0
-	  this.openForm()
+	computed: {
+		formItems() {
+			return [{
+				md: 24,
+				isShow: true,
+				name: 'el-input',
+				attributes: { placeholder: '请输入', disabled: true },
+				formItemAttributes: {
+					label: '所属商户',
+					prop: 'companyName',
+					rules: [...required]
+				},
+			}, {
+				md: 24,
+				isShow: true,
+				name: 'el-input',
+				attributes: { placeholder: '请输入', disabled: true },
+				formItemAttributes: {
+					label: '类型名称',
+					prop: 'dictTypeName',
+					rules: [...required]
+				},
+			}, {
+				md: 24,
+				isShow: true,
+				name: 'el-input',
+				attributes: { placeholder: '请输入' },
+				formItemAttributes: {
+					label: '字典值',
+					prop: 'dictValue',
+					rules: [...required]
+				},
+			}, {
+				md: 24,
+				isShow: true,
+				name: 'slot-component',
+				attributes: {},
+				formItemAttributes: {
+					label: '状态',
+					prop: 'status',
+					rules: [...required]
+				},
+				render: (h, { props, onInput }) => {
+					var { value } = props
+					return (
+						<el-radio-group v-model={this.formData.status}>
+							<el-radio disabled={this.formDialogType == 2} label="ON">启用</el-radio>
+							<el-radio disabled={this.formDialogType == 2} label="OFF">禁用</el-radio>
+						</el-radio-group>
+					)
+				}
+			}, {
+				md: 24,
+				isShow: true,
+				name: 'el-input',
+				attributes: { placeholder: '请输入' },
+				formItemAttributes: {
+					label: '排序',
+					prop: 'sortNum',
+					rules: []
+				},
+			}, {
+				md: 24,
+				isShow: true,
+				name: 'el-input',
+				attributes: { placeholder: '请输入备注内容', type: "textarea", rows: 3 },
+				formItemAttributes: {
+					label: '备注',
+					prop: 'remark',
+					rules: []
+				}
+			}]
+		}
 	},
-	openForm() {
-	  this.formDialog = true;
-	},
-	formCancel() {
-	  this.$refs.formRef.$refs.inlineForm.clearValidate()
-	  this.$data.formData = this.$options.data().formData
-	  this.formData.dictType = this.dictType
-	  this.formData.dictTypeName = this.dictTypeName
-	  this.formDialog = false
-	},
-	formConfirm() {
-	  this.$refs.formRef.validate((valid, invalidFields, errLabels) => {
-	    if (valid) {
-	      ([add, edit][this.formDialogType])(this.formData).then(res => {
-	        this.$message({ type: 'success', message: `${this.formDialogTitles[this.formDialogType]}成功!` })
-	        this.formCancel()
-	        this.$refs.pageRef.refreshList()
-	      })
-	    }
-	  })
-	},
-	// 下载导入模版
-	handleDownload() {
-		commonTemplateDownload({ name: '数据字典导入.xlsx' }, `${this.$route.meta.title}`).then(res => {
-		    this.$message({
-		        message: '下载成功',
-		        type: 'success'
-		    })
-		}).catch(err => {
-		    this.$message.error('下载失败')
-		})
-	},
-  }
+	methods: {
+		// 列表请求函数
+		getList(p) {
+			try {
+				var pam = JSON.parse(JSON.stringify(p))
+				if (this.dictType) {
+					pam.params.push({ "param": "a.dict_type", "compare": "=", "value": this.dictType })
+				}
+				return getDataDictionary(pam)
+			} catch (error) {
+				console.log(error)
+			}
+		},
+		// 列表导出函数
+		exportList: getDataDictionaryExport,
+		getType() {
+			getType().then(res => {
+				this.typeList = res.data
+				this.$refs.pageRef.refreshList()
+			})
+		},
+		handleNodeClick(e) {
+			this.dictType = e.dictType
+			this.formData.dictType = e.dictType
+			this.formData.dictTypeName = e.remark
+			this.dictTypeName = e.remark
+			this.$refs.pageRef.refreshList()
+		},
+		// 表格列解析渲染数据更改
+		columnParsing(item, defaultData) {
+			return defaultData
+		},
+		operation() {
+			if (true) {
+				return (h, { row, index, column }) => {
+					return (
+						<div class="operation-btns">
+							{true ? (
+								<zj-button
+									useLoading={false}
+									parameter={[row]}
+									buttonAttributes={{
+										size: 'mini',
+										type: 'primary'
+									}}
+									buttonEvents={{
+										click: (row) => {
+											this.$refs.tabPage.addTab({
+												// 对应显示的模块
+												activeKey: "detail",
+												// 唯一标识
+												key: "detail",
+												// 页签名称
+												label: "编辑",
+												// 打开时事件
+												triggerEvent: () => {
+													this.formCancel()
+													this.formDialogType = 1
+													this.$nextTick(() => {
+														this.formData = row
+													})
+												},
+												// 关闭时事件
+												closeEvent: () => {
+												}
+											})
+										}
+									}}
+								>
+									编辑
+								</zj-button>
+							) : null}
+							{true ? (
+								<el-popconfirm
+									icon="el-icon-info"
+									icon-color="red"
+									title="这是一段内容确定删除吗?"
+									onConfirm={() => {
+										del({ id: row.sysDictId })
+											.then(res => {
+												this.$refs.pageRef.refreshList()
+												this.$message({
+													type: 'success',
+													message: `删除成功!`
+												})
+											})
+											.catch(err => {
+												console.log(err)
+											})
+									}}
+								>
+									<zj-button
+										slot="reference"
+										buttonAttributes={{
+											size: 'mini',
+											type: 'danger'
+										}}
+									>
+										删除
+									</zj-button>
+								</el-popconfirm>
+							) : null}
+						</div>
+					)
+				}
+			}
+			return undefined
+		},
+		addData() {
+			this.$refs.tabPage.addTab({
+				// 对应显示的模块
+				activeKey: "add",
+				// 唯一标识
+				key: "add",
+				// 页签名称
+				label: "新增",
+				// 打开时事件
+				triggerEvent: () => {
+					this.formCancel()
+					this.formDialogType = 0
+				},
+				// 关闭时事件
+				closeEvent: () => {
+				}
+			})
+		},
+		formCancel() {
+			this.$refs?.formRef?.$refs?.inlineForm?.clearValidate();
+			this.$data.formData = this.$options.data().formData;
+			this.formData.dictType = this.dictType;
+			this.formData.dictTypeName = this.dictTypeName;
+		},
+		formConfirm(removeTab) {
+			this.$refs.formRef.validate((valid, invalidFields, errLabels) => {
+				if (valid) {
+					([add, edit][this.formDialogType])(this.formData).then(res => {
+						this.$message({
+							type: 'success',
+							message: this.formDialogTitles[this.formDialogType] + `成功!`
+						})
+						this.$refs.pageRef.refreshList();
+						removeTab('list')
+					})
+				}
+			})
+		},
+		// 下载导入模版
+		handleDownload() {
+			commonTemplateDownload({ name: '数据字典导入.xlsx' }, `${this.$route.meta.title}`).then(res => {
+				this.$message({
+					message: '下载成功',
+					type: 'success'
+				})
+			}).catch(err => {
+				this.$message.error('下载失败')
+			})
+		},
+	}
 }
 </script>
 
 <style lang="scss" scoped>
-	.title{
-		width: 120px;
-		margin: 24px 0 20px 20px;
-		padding-bottom: 10px;
-		border-bottom: 1px solid #cccccc;
-		font-weight: bold;
-	}
+.title {
+	width: 120px;
+	margin: 24px 0 20px 20px;
+	padding-bottom: 10px;
+	border-bottom: 1px solid #cccccc;
+	font-weight: bold;
+}
 </style>

+ 7 - 7
src/views/setting/departmentManage/index.vue

@@ -97,8 +97,8 @@
             </el-form-item>
           </el-form>
           <div slot="footer" class="dialog-footer">
-            <el-button @click="data.removeTab">取 消</el-button>
-            <el-button type="primary" @click="submitMainForm">确 定</el-button>
+            <el-button @click="data.removeTab()">取 消</el-button>
+            <el-button type="primary" @click="submitMainForm(data.removeTab)">确 定</el-button>
           </div>
         </div>
       </div>
@@ -254,7 +254,7 @@ export default {
         // 打开时事件
         triggerEvent: () => {
           this.cancelMainForm()
-          this.$nextTick(()=>{
+          this.$nextTick(() => {
             this.mainFormType = type
             this.mainFormVisible = true
             if (type == 'add') {
@@ -279,7 +279,7 @@ export default {
         },
         // 关闭时事件
         closeEvent: () => {
-          
+
         }
       })
     },
@@ -292,7 +292,7 @@ export default {
     },
 
     // 提交 网点表单
-    submitMainForm() {
+    submitMainForm(removeTab) {
       this.$refs.mainForm.validate(valid => {
         if (valid) {
           let parentId = null
@@ -315,15 +315,15 @@ export default {
           if (this.mainFormType == 'edit') {
             params.websitId = this.editId
             editDepartment(params).then(res => {
-              this.cancelMainForm()
               this.getList()
               this.$successMsg('编辑成功')
+              removeTab('list')
             })
           } else {
             addDepartment(params).then(res => {
-              this.cancelMainForm()
               this.getList()
               this.$successMsg('添加成功')
+              removeTab('list')
             })
           }
         }

+ 112 - 73
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="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>
-		<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,14 +85,12 @@ export default {
 			recordSelected: [],
 			/** 表单变量 */
 			formDialogType: 0,
-			formDialogTitles: ["新增", "编辑", "详情"],
-			formDialog: false,
-			formDialog2: false,
 			formData: {
 				type: "A",
 				title: "",
 				files: [],
 				adminWebsitIds: [],
+				adminNickName: "",
 				workerIds: [],
 				content: "",
 			},
@@ -268,7 +276,7 @@ export default {
 				},
 				render: (h, { props, onInput }) => {
 					var { value } = props
-					return <div>{this.websitList.filter(item => !!~value.indexOf(item.companyWechatId)).map(item => <el-tag style="margin-right:5px">{item.companyName}</el-tag>)}</div>
+					return <div>{this.websitList.filter(item => !!~value.indexOf(item.adminUserId)).map(item => <el-tag style="margin-right:5px">{item.companyName}</el-tag>)}</div>
 				},
 			},
 			{
@@ -319,33 +327,57 @@ export default {
 		operation(h, { row, index, column }) {
 			return (<div class='operation-btns'>
 				{row.status == "NO" ? <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 = 1
-						this.openForm()
+					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={() => {
-					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>
 				{row.status == "NO" ? <el-popconfirm
@@ -367,31 +399,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]({
@@ -407,7 +446,7 @@ export default {
 							type: 'success',
 							message: status == "YES" ? '发送成功!' : '保存成功!'
 						})
-						this.formCancel()
+						removeTab('list')
 						this.$refs.pageRef.refreshList()
 					})
 				}

+ 53 - 38
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>
@@ -21,7 +30,7 @@ import TemplatePage from '@/components/template/template-page-1.vue'
 import import_mixin from '@/components/template/import_mixin.js'
 import ImageUpload from '@/components/file-upload'
 import { required, mobileRequired, mobile } from '@/components/template/rules_verify.js'
-import { noticeListPageV2, noticePageExport, getNoticeDetail, noticeAdd, noticeUpdate, noticeDel } from "@/api/announcement";
+import { noticeReadList, noticeReadListExport, getNoticeDetail, zfapiNoticeDetail, noticeAdd, noticeUpdate, noticeDel } from "@/api/announcement";
 import { memberListPageV2 } from "@/api/masterManagement";
 import { getList as getListaa } from "@/api/merchant";
 export default {
@@ -44,9 +53,6 @@ export default {
 			recordSelected: [],
 			/** 表单变量 */
 			formDialogType: 0,
-			formDialogTitles: ["新增", "编辑", "详情"],
-			formDialog: false,
-			formDialog2: false,
 			formData: {
 				type: "A",
 				title: "",
@@ -129,9 +135,9 @@ export default {
 	},
 	methods: {
 		// 列表请求函数
-		getList:noticeListPageV2,
+		getList: noticeReadList,
 		// 列表导出函数
-		exportList: noticePageExport,
+		exportList: noticeReadListExport,
 		// 表格列解析渲染数据更改
 		columnParsing(item, defaultData) {
 			return defaultData
@@ -144,40 +150,49 @@ 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(() => {
+								zfapiNoticeDetail({
+									id: row.id
+								}).then(res => {
+									console.log(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();
       })

+ 181 - 172
src/views/userManagement/masterManagement/index.vue

@@ -1,42 +1,52 @@
 <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" -->
-	  <div slot="moreSearch">
-	    <el-radio-group v-model="examineStatus" size="mini" @change="changeType">
-	    	<el-radio-button label="">全部</el-radio-button>
-	    	<el-radio-button label="WAIT">待审核</el-radio-button>
-	    	<el-radio-button label="OK">审核通过</el-radio-button>
-	    	<el-radio-button label="FAIL">驳回</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 v-if="formData.examineStatus == 'WAIT'" size="mini" type="primary" @click="audit('OK')">审核通过</el-button>
-			<el-button v-if="formData.examineStatus == 'WAIT'" size="mini" type="danger" @click="audit('FAIL')">审核驳回</el-button>
-			<el-button size="mini" @click="formCancel">取 消</el-button>
-	    </div>
-	  </el-dialog>
-	</template-page>
+  <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()">
+          <div slot="moreSearch">
+            <el-radio-group v-model="examineStatus" size="mini" @change="changeType">
+              <el-radio-button label="">全部</el-radio-button>
+              <el-radio-button label="WAIT">待审核</el-radio-button>
+              <el-radio-button label="OK">审核通过</el-radio-button>
+              <el-radio-button label="FAIL">驳回</el-radio-button>
+            </el-radio-group>
+            <br><br>
+          </div>
+        </template-page>
+      </div>
+      <div v-if="~['examine', '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="formItems">
+          </zj-form-module>
+        </zj-form-container>
+        <div slot="footer" class="dialog-footer">
+          <el-button v-if="formData.examineStatus == 'WAIT'" size="mini" type="primary"
+            @click="audit('OK', data.removeTab)">审核通过</el-button>
+          <el-button v-if="formData.examineStatus == 'WAIT'" size="mini" type="danger"
+            @click="audit('FAIL', data.removeTab)">审核驳回</el-button>
+          <el-button size="mini" @click="data.removeTab()">取 消</el-button>
+        </div>
+      </div>
+    </template>
+  </zj-tab-page>
 </template>
 
 <script>
 import TemplatePage from '@/components/template/template-page-1.vue'
 import import_mixin from '@/components/template/import_mixin.js'
 import { required, mobileRequired, mobile } from '@/components/template/rules_verify.js'
-import { memberListPageV2,memberPageExport, getMemberDetail, memberAudit, memberInner } from "@/api/masterManagement";
+import { memberListPageV2, memberPageExport, getMemberDetail, memberAudit, memberInner } from "@/api/masterManagement";
 import operation_mixin from '@/components/template/operation_mixin.js'
 export default {
   components: { TemplatePage },
-  mixins: [import_mixin,operation_mixin],
+  mixins: [import_mixin, operation_mixin],
   data() {
     return {
       // 事件组合
@@ -53,14 +63,11 @@ export default {
       // 勾选选中行
       recordSelected: [],
       /** 表单变量 */
-      formDialogType: 0,
-      formDialogTitles: ["审核", "详情"],
-      formDialog: false,
       formData: {
-		type: '工程师',
-		examineRemark: ''
+        type: '工程师',
+        examineRemark: ''
       },
-	  examineStatus: ''
+      examineStatus: ''
     }
   },
   computed: {
@@ -73,7 +80,7 @@ export default {
         md: 12,
         isShow: true,
         name: 'el-select',
-		options: [{label: '待审核', value: 'WAIT'},{label: '驳回', value: 'FAIL'},{label: '通过', value: 'OK'}],
+        options: [{ label: '待审核', value: 'WAIT' }, { label: '驳回', value: 'FAIL' }, { label: '通过', value: 'OK' }],
         attributes: { placeholder: '请输入', disabled: true },
         formItemAttributes: {
           label: '审核状态',
@@ -124,18 +131,18 @@ export default {
         md: 12,
         isShow: true,
         name: 'slot-component',
-        attributes: { },
+        attributes: {},
         formItemAttributes: {
           label: '身份证',
           prop: 'idCardImg',
           rules: []
         },
-		render: (h, { props, onInput }) => {
-		  var { value } = props
-		  return (
-		    <el-image src={this.formData.idCardImg} style='width: 120px;height:120px' preview-src-list={[this.formData.idCardImg]} fit="fit"></el-image>
-		  )
-		}
+        render: (h, { props, onInput }) => {
+          var { value } = props
+          return (
+            <el-image src={this.formData.idCardImg} style='width: 120px;height:120px' preview-src-list={[this.formData.idCardImg]} fit="fit"></el-image>
+          )
+        }
       }, {
         md: 12,
         isShow: true,
@@ -160,7 +167,7 @@ export default {
         md: 24,
         isShow: true,
         name: 'el-input',
-        attributes: { placeholder: '请输入',type: "textarea", disabled: this.formData.examineStatus == 'WAIT' ? false:true },
+        attributes: { placeholder: '请输入', type: "textarea", disabled: this.formData.examineStatus == 'WAIT' ? false : true },
         formItemAttributes: {
           label: '备注',
           prop: 'examineRemark',
@@ -170,152 +177,154 @@ export default {
     }
   },
   methods: {
-	// 切换状态
-	changeType(val) {
-	  this.$refs.pageRef.refreshList()
-	},
+    // 切换状态
+    changeType(val) {
+      this.$refs.pageRef.refreshList()
+    },
     // 列表请求函数
-	getList(p) {
-	  try {
-	    var pam = JSON.parse(JSON.stringify(p))
-	    if (this.examineStatus) {
-	      pam.params.push({ "param": "b.examine_status", "compare": "=", "value": this.examineStatus })
-	    }
-	    return memberListPageV2(pam)
-	  } catch (error) {
-	    console.log(error)
-	  }
-	},
+    getList(p) {
+      try {
+        var pam = JSON.parse(JSON.stringify(p))
+        if (this.examineStatus) {
+          pam.params.push({ "param": "b.examine_status", "compare": "=", "value": this.examineStatus })
+        }
+        return memberListPageV2(pam)
+      } catch (error) {
+        console.log(error)
+      }
+    },
     // 列表导出函数
     exportList: memberPageExport,
     // 表格列解析渲染数据更改
     columnParsing(item, defaultData) {
-		if (item.jname === 'idCardImg') {
-		        defaultData.render = (h, { row, index, column }) => {
-		          return (
-		            <div style="padding:0 6px;cursor: pointer;">
-		              {row.idCardImg ? row.idCardImg.split(",").map(url => <el-image src={url} preview-src-list={[url]} fit="fit" style="width:80px;height:80px;" />) : null}
-		            </div>
-		          )
-		        }
-		      }
+      if (item.jname === 'idCardImg') {
+        defaultData.render = (h, { row, index, column }) => {
+          return (
+            <div style="padding:0 6px;cursor: pointer;">
+              {row.idCardImg ? row.idCardImg.split(",").map(url => <el-image src={url} preview-src-list={[url]} fit="fit" style="width:80px;height:80px;" />) : null}
+            </div>
+          )
+        }
+      }
       return defaultData
     },
     // 监听勾选变化
     selectionChange(data) {
       this.recordSelected = data
     },
-	// 表格操作列
-	operation() {
-		return this.operationBtn({
-			detail: {
-				btnType: 'text',
-				click: ({ row, index, column }) => {
-					getMemberDetail({ id: row.id }).then(res => {
-					  Object.assign(this.formData, res.data)
-					  this.formDialogType = 1
-					  this.openForm()
-					})
-				}
-			},
-			examine: {
-				btnType: 'text',
-				conditions: ({ row, index, column }) => {
-					return row.examineStatus == 'WAIT'
-				},
-				click: ({ row, index, column }) => {
-					getMemberDetail({ id: row.id }).then(res => {
-					  Object.assign(this.formData, res.data)
-					  this.formDialogType = 0
-					  this.openForm()
-					})
-				}
-			},
-			setService: {
-				btnType: 'text',
-				prompt: '请确认是否设为分销员?',
-				click: ({ row, index, column }) => {
-					memberInner({
-						type: 'SERVICE',
-						userIds: row.userId
-					}).then(res => {
-						if (res.code == 200) {
-							this.$message({ type: 'success', message: '设为分销员成功!' })
-							this.$refs.pageRef.refreshList()
-						} else {
-							this.$message.error(res.msg);
-						}
-					})
-				}
-			},
-			setCustomer: {
-				btnType: 'text',
-				prompt: '请确认是否设为客户?',
-				click: ({ row, index, column }) => {
-					memberInner({
-						type: 'GENERAL',
-						userIds: row.userId
-					}).then(res => {
-						if (res.code == 200) {
-							this.$message({ type: 'success', message: '设为客户成功!' })
-							this.$refs.pageRef.refreshList()
-						} else {
-							this.$message.error(res.msg);
-						}
-					})
-				}
-			},
-		})
-	},
-    addData() {
-      this.formDialogType = 0
-      this.openForm()
-    },
-    openForm() {
-      this.formDialog = true;
+    // 表格操作列
+    operation() {
+      return this.operationBtn({
+        detail: {
+          btnType: 'text',
+          click: ({ row, index, column }) => {
+            this.$refs.tabPage.addTab({
+              // 对应显示的模块
+              activeKey: "detail",
+              // 唯一标识
+              key: "detail",
+              // 页签名称
+              label: "编辑",
+              // 打开时事件
+              triggerEvent: () => {
+                this.guanbi()
+                this.$nextTick(() => {
+                  getMemberDetail({ id: row.id }).then(res => {
+                    Object.assign(this.formData, res.data)
+                  })
+                })
+              },
+              // 关闭时事件
+              closeEvent: () => {
+              }
+            })
+          }
+        },
+        examine: {
+          btnType: 'text',
+          conditions: ({ row, index, column }) => {
+            return row.examineStatus == 'WAIT'
+          },
+          click: ({ row, index, column }) => {
+            this.$refs.tabPage.addTab({
+              // 对应显示的模块
+              activeKey: "examine",
+              // 唯一标识
+              key: "examine",
+              // 页签名称
+              label: "审核",
+              // 打开时事件
+              triggerEvent: () => {
+                this.guanbi()
+                this.$nextTick(() => {
+                  getMemberDetail({ id: row.id }).then(res => {
+                    Object.assign(this.formData, res.data)
+                  })
+                })
+              },
+              // 关闭时事件
+              closeEvent: () => {
+              }
+            })
+          }
+        },
+        setService: {
+          btnType: 'text',
+          prompt: '请确认是否设为分销员?',
+          click: ({ row, index, column }) => {
+            memberInner({
+              type: 'SERVICE',
+              userIds: row.userId
+            }).then(res => {
+              if (res.code == 200) {
+                this.$message({ type: 'success', message: '设为分销员成功!' })
+                this.$refs.pageRef.refreshList()
+              } else {
+                this.$message.error(res.msg);
+              }
+            })
+          }
+        },
+        setCustomer: {
+          btnType: 'text',
+          prompt: '请确认是否设为客户?',
+          click: ({ row, index, column }) => {
+            memberInner({
+              type: 'GENERAL',
+              userIds: row.userId
+            }).then(res => {
+              if (res.code == 200) {
+                this.$message({ type: 'success', message: '设为客户成功!' })
+                this.$refs.pageRef.refreshList()
+              } else {
+                this.$message.error(res.msg);
+              }
+            })
+          }
+        },
+      })
     },
-    formCancel() {
-      this.$refs.formRef.$refs.inlineForm.clearValidate()
+    guanbi() {
+      this.$refs?.formRef?.$refs?.inlineForm?.clearValidate()
       this.$data.formData = this.$options.data().formData
-      this.formDialog = false
     },
-	audit(examineStatusEnum){
-		memberAudit({ 
-			examineStatusEnum,
-			examineRemark: this.formData.examineRemark,
-			id: this.formData.id
-		}).then(res => {
-			this.$message({ type: 'success', message: '审核成功!' })
-			this.formCancel()
-			this.$refs.pageRef.refreshList()
-		})
-	},
-	memberInner(type){
-		memberInner({
-			type,
-			userIds: this.formData.userId
-		}).then(res => {
-			this.$message({ type: 'success', message: '设置成功!' })
-			this.$refs.pageRef.refreshList()
-		})
-	},
-    formConfirm() {
-      this.$refs.formRef.validate((valid, invalidFields, errLabels) => {
-        if (valid) {
-          ([memberAudit][this.formDialogType])(this.formData).then(res => {
-            this.$message({ type: 'success', message: `${this.formDialogTitles[this.formDialogType]}成功!` })
-            this.formCancel()
-            this.$refs.pageRef.refreshList()
-          })
-        }
+    audit(examineStatusEnum, removeTab) {
+      memberAudit({
+        examineStatusEnum,
+        examineRemark: this.formData.examineRemark,
+        id: this.formData.id
+      }).then(res => {
+        this.$message({ type: 'success', message: '审核成功!' })
+        removeTab('list')
+        this.$refs.pageRef.refreshList()
       })
-    }
+    },
   }
 }
 </script>
 
 <style lang="scss" scoped>
-	.tab{
-		padding: 20px 20px 0 20px;
-	}
+.tab {
+  padding: 20px 20px 0 20px;
+}
 </style>

+ 1 - 0
src/views/valueAddedService/orderSettleManag/mixins/basicInfo.js

@@ -164,6 +164,7 @@ export default {
                 onSelectPosi={data => {
                   // 赋值GPS详细地址
                   this.addFormData.userAddress = data.name
+                  this.$refs?.addFormRef?.$refs?.inlineForm?.clearValidate(["userAddress"])
                   // // 获取经纬度
                   // this.addFormData.lng = data.center[0]
                   // this.addFormData.lat = data.center[1]

+ 2 - 2
src/views/valueAddedService/orderSettleManag/mixins/examineInfo.js

@@ -14,10 +14,10 @@ export default {
           md: 24,
           formItemAttributes: {
             label: '审批结果',
-            prop: 'flag',
+            prop: 'flagSh',
             rules: [...required],
           },
-          options: [{ label: "通过", value: "OK" }, { label: "失败", value: "FAIL" }],
+          options: [{ label: "通过", value: "OK" }, { label: "驳回", value: "FAIL" }],
           attributes: { disabled: false, placeholder: '请选择' },
         },
         {

+ 22 - 1
src/views/valueAddedService/orderSettleManag/mixins/formItems.js

@@ -69,7 +69,7 @@ export default {
                   {({ "EXPIRE": "过期", "CANCEL": "取消", "PAID": "已支付", "WAIT": "待支付", "REFUND": "已退款" })[formData.payStatus] || ""}
                 </el-descriptions-item>
                 <el-descriptions-item label="支付方式">
-                  {({ 1: "扫码支付", 2: "代客支付" })[formData.payType] || ""}
+                  {({ 1: "微信支付", 2: "代客支付", 3: "现金支付" })[formData.payType] || ""}
                 </el-descriptions-item>
                 <el-descriptions-item label="支付订单号" >
                   {formData.payNo}
@@ -89,6 +89,27 @@ export default {
                 <el-descriptions-item label="操作时间" >
                   {formData.updateTime}
                 </el-descriptions-item>
+                {this.addFormData ? [
+                  <el-descriptions-item label="审批人" >
+                    {formData.examineBy}
+                  </el-descriptions-item>,
+                  <el-descriptions-item label="审批状态" >
+                    {({ WAIT: "待审核", OK: "通过", FAIL: "失败" })[formData.flag]}
+                  </el-descriptions-item>,
+                  <el-descriptions-item label="审批时间" >
+                    {formData.examineTime}
+                  </el-descriptions-item>,
+                  <el-descriptions-item label="" >
+                  </el-descriptions-item>,
+                ] : null}
+              </el-descriptions>
+              <el-descriptions border title="" column={1} colon={false} labelStyle={{ width: '8%' }} contentStyle={{ width: '92%' }}>
+                <el-descriptions-item label="订单备注">
+                  {formData.remark}
+                </el-descriptions-item>
+                <el-descriptions-item label="审批备注">
+                  {formData.examineRemark}
+                </el-descriptions-item>
               </el-descriptions>
             </div>
           )

+ 1 - 1
src/views/valueAddedService/orderSettleManag/mixins/productInfo.js

@@ -24,7 +24,7 @@ export default {
           md: 6,
           attributes: { disabled: false, placeholder: '请输入' },
           formItemAttributes: {
-            label: '发价格',
+            label: '发价格',
             prop: 'invoiceAmount',
             rules: [...required]
           }

+ 1 - 1
src/views/valueAddedService/orderSettleManag/mixins/serviceInfo.js

@@ -219,7 +219,7 @@ export default {
             prop: 'payType',
             rules: [...required],
           },
-          options: [{ label: "扫码支付", value: 1 }, { label: "现金支付", value: 3 }],
+          options: [{ label: "微信支付", value: 1 }, { label: "现金支付", value: 3 }],
           attributes: { disabled: false, placeholder: '请选择' },
         },
       ]

+ 21 - 11
src/views/valueAddedService/orderSettleManag/pages/offline.vue

@@ -19,12 +19,12 @@
             :form-items="examineInfo">
           </zj-form-module>
         </zj-form-container>
-        <div v-if="formType == 1 && formData.flag == 'WAIT'" slot="footer" class="dialog-footer">
+        <div v-if="formType == 1 && formDshType" slot="footer" class="dialog-footer">
           <el-button size="mini" type="primary" @click="shenhexinxi">审核</el-button>
         </div>
-        <div v-if="formType == 0 && formData.payStatus == 'WAIT' && formData.payType == 1" slot="footer"
-          class="dialog-footer">
-          <el-button size="mini" type="primary" @click="() => { wxPay(formData.id) }">扫码支付</el-button>
+        <div v-if="formType == 0 && formData.flag == 'OK' && formData.payStatus == 'WAIT' && formData.payType == 1"
+          slot="footer" class="dialog-footer">
+          <el-button size="mini" type="primary" @click="() => { wxPay(formData.id) }">微信支付</el-button>
         </div>
       </el-dialog>
     </div>
@@ -47,7 +47,7 @@
       @close="codeUrl = ''">
       <h3 style="text-align: center;">扫二维码支付</h3>
       <div ref="payQRCode" style="display: flex; justify-content: center;" />
-      <div style="color: #EA8000;text-align: center;margin-top: 20px;">注:支付成功后,方可操作确认提货!</div>
+      <div style="color: #EA8000;text-align: center;margin-top: 20px;">注:支付成功后,方可操作!</div>
       <div style="display: flex;justify-content: flex-end;margin-top: 30px;">
         <el-button size="mini" type="text" @click="codeUrl = ''">取消</el-button>
       </div>
@@ -90,12 +90,14 @@ export default {
       formTypeName: ["查看", "审批"],
       formType: -1,
       formData: {
+        flagSh: "",
         flag: "",
         examineRemark: "",
         pgIncreItems: []
       },
       formDialog: false,
       addFormDialog: false,
+      formDshType: false,
       addFormData: {
         shiyongleixing: "按使用年限",
         "amount": "",
@@ -215,6 +217,9 @@ export default {
     wxPay(id) {
       increOrderSettleGeneratePayCode({ id }).then(res => {
         this.codeUrl = res.data.codeUrl
+        if(this.$refs?.payQRCode?.innerHTML){
+          this.$refs.payQRCode.innerHTML = '';
+        }
         this.$nextTick(() => {
           new QRCode(this.$refs.payQRCode, {
             text: res.data.codeUrl,
@@ -311,6 +316,7 @@ export default {
           },
           click: ({ row, index, column }) => {
             this.formType = 1
+            this.formDshType = true
             this.getDetail(row.id)
           }
         },
@@ -327,6 +333,7 @@ export default {
     },
     // 关闭弹窗
     formCancel() {
+      this.formDshType = false
       this.$refs?.formRef?.$refs?.inlineForm?.clearValidate()
       this.$data.formData = this.$options.data().formData
       this.formDialog = false
@@ -337,7 +344,7 @@ export default {
     shenhexinxi() {
       this.$refs.formRef.validate((valid, invalidFields, errLabels) => {
         if (valid) {
-          increOrderSettleExamine(this.formData).then(res => {
+          increOrderSettleExamine({ ...this.formData, flag: this.formData.flagSh }).then(res => {
             this.$message({ type: 'success', message: `审核完成!` })
             this.formCancel()
             this.$refs?.pageRef?.refreshList()
@@ -346,6 +353,7 @@ export default {
       })
     },
     addFormCancel() {
+      this.formDshType = false
       this.$refs?.addFormRef?.$refs?.inlineForm?.clearValidate()
       this.$data.addFormData = this.$options.data().addFormData
       this.addFormDialog = false
@@ -365,11 +373,13 @@ export default {
             "machineImg": this.addFormData.machineImg.map(item => item.url).join(","),
           }).then(res => {
             this.$message({ type: 'success', message: `新增成功!` })
-            if (res.data.payStatus == "WAIT" && res.data.payType == 1) {
-              this.wxPay(res.data.id)
-            } else {
-              this.addFormCancel()
-            }
+            this.$refs?.pageRef?.refreshList()
+            this.addFormCancel()
+            // if (res.data.payStatus == "WAIT" && res.data.payType == 1) {
+            //   this.wxPay(res.data.id)
+            // } else {
+            //   this.addFormCancel()
+            // }
           })
         }
       })