Explorar el Código

角色模块开发

zhangqiOMG hace 3 años
padre
commit
fd39fbfaac
Se han modificado 62 ficheros con 1771 adiciones y 712 borrados
  1. 35 29
      src/HManagement/accountManage/index.vue
  2. 85 109
      src/HManagement/accountManage/modules/account_add.vue
  3. 4 4
      src/HManagement/accountManage/modules/account_delete.vue
  4. 82 61
      src/HManagement/accountManage/modules/account_detail.vue
  5. 81 183
      src/HManagement/accountManage/modules/account_edit.vue
  6. 69 51
      src/HManagement/accountManage/modules/list.vue
  7. 28 0
      src/HManagement/accountManage/modules/unuseAccount.vue
  8. 28 0
      src/HManagement/accountManage/modules/useAccdount.vue
  9. 0 12
      src/HManagement/notice/index.vue
  10. 51 0
      src/HManagement/notice/notice_mag/index.vue
  11. 29 0
      src/HManagement/notice/notice_mag/modules/delete.vue
  12. 106 0
      src/HManagement/notice/notice_mag/modules/list.vue
  13. 154 0
      src/HManagement/notice/notice_mag/modules/notice_add.vue
  14. 43 0
      src/HManagement/notice/notice_mag/modules/release.vue
  15. 43 0
      src/HManagement/notice/notice_mag/modules/tp.vue
  16. 15 29
      src/HManagement/roleManage/index.vue
  17. 1 38
      src/HManagement/roleManage/modules/add_role.vue
  18. 82 20
      src/HManagement/roleManage/modules/edit_role.vue
  19. 72 56
      src/HManagement/roleManage/modules/list.vue
  20. 49 4
      src/HManagement/siteManage/securityConfig/index.vue
  21. 51 0
      src/HManagement/siteManage/securityConfig/modules/basicinfo.vue
  22. 127 0
      src/HManagement/siteManage/securityConfig/modules/edit.vue
  23. 88 2
      src/HManagement/siteManage/securityConfig/modules/loginSelect.vue
  24. 61 33
      src/HManagement/siteManage/securityConfig/modules/password.vue
  25. 72 0
      src/HManagement/siteManage/securityConfig/modules/watermark.vue
  26. 21 14
      src/components/dynamic-table/index.vue
  27. 23 6
      src/components/layout/index.vue
  28. 2 1
      src/components/layout/modules/header.vue
  29. 42 0
      src/components/previewImage/index.vue
  30. 42 6
      src/components/upload/hw_obs_upload.vue
  31. 4 0
      src/main.js
  32. 59 41
      src/router/HManagement.js
  33. 0 0
      src/router/SLManagement.js
  34. 9 7
      src/router/index.js
  35. 16 1
      src/store/index.js
  36. 37 2
      src/style/style.css
  37. 17 0
      src/utils/tool.js
  38. 2 2
      src/views/mediaStock/modules/list.vue
  39. 18 1
      src/views/select_accounts/index.vue
  40. BIN
      yos.zip
  41. 1 0
      yos/css/339.228c4bfc.css
  42. 1 0
      yos/css/348.228c4bfc.css
  43. 0 0
      yos/css/about.03500622.css
  44. 0 0
      yos/css/app.73468aff.css
  45. BIN
      yos/favicon.ico
  46. BIN
      yos/fonts/element-icons.f1a45d74.ttf
  47. BIN
      yos/fonts/element-icons.ff18efd1.woff
  48. BIN
      yos/img/avatar.c6500dff.png
  49. BIN
      yos/img/bg.e258adac.png
  50. 1 0
      yos/img/more.58cd973b.svg
  51. 1 0
      yos/img/work_station.550df9c4.svg
  52. 1 0
      yos/index.html
  53. 0 0
      yos/js/339-legacy.1f7ed2ff.js
  54. 0 0
      yos/js/348.08dea931.js
  55. 9 0
      yos/js/495.2e8ee323.js
  56. 9 0
      yos/js/612-legacy.6a3b2802.js
  57. 0 0
      yos/js/about-legacy.2a7abb3d.js
  58. 0 0
      yos/js/about.b3786a60.js
  59. 0 0
      yos/js/app-legacy.92294e13.js
  60. 0 0
      yos/js/app.439ff59a.js
  61. 0 0
      yos/js/chunk-vendors-legacy.77346ae4.js
  62. 0 0
      yos/js/chunk-vendors.cf9b356c.js

+ 35 - 29
src/HManagement/accountManage/index.vue

@@ -1,25 +1,25 @@
 <template>
-  <div class="container normal-panel">
-    <el-row :gutter="40">
-      <el-col :span="12" style="border-right:1px solid #ccc;min-height:calc(100vh - 199px)">
-        <list v-if="tool.checkAuth($route.name,'read')" ref="list" @rowClick="rowClick">
-          <add v-if="tool.checkAuth($route.name,'insert')" slot="add" @onSuccess="onSuccess"></add>
-        </list>
-      </el-col>
-      <el-col :span="12">
-        <account-detail ref="detail">
-          <template v-slot:edit="scope">
-            <account-edit v-if="tool.checkAuth($route.name,'update')" :data="scope.data" @onSuccess="onSuccess" style="margin-right:10px"></account-edit>
-          </template>
-          <template v-slot:del="scope">
-            <account-del v-if="tool.checkAuth($route.name,'delete')" :data="scope.data" @onSuccess="onSuccess"></account-del>
-          </template>
-          <template v-slot:role="scope">
-            <role v-if="tool.checkAuth($route.name,'edit_role')" :data="scope.data" @onSuccess="onSuccess"></role>
-          </template>
-        </account-detail>
-      </el-col>
-    </el-row>
+  <div>
+    <div class="container normal-panel normal-margin">
+      <add style="margin-right:10px;" v-if="tool.checkAuth($route.name,'insert')" @onSuccess="onSuccess"></add>
+    </div>
+    <list v-if="tool.checkAuth($route.name,'read')" ref="list" @handleSelectionChange="handleSelectionChange">
+      <template v-slot:detail="scope">
+        <div class="inline-16">
+          <el-button size="mini" type="text" @click="$router.push({path:'/account_details',query:{id:scope.data.userid}})">查 看</el-button>
+        </div>
+      </template>
+      <template v-slot:del="scope">
+        <account-del v-if="tool.checkAuth($route.name,'delete')" :data="scope.data" @onSuccess="onSuccess" :type="'text'"></account-del>
+      </template>
+      <template v-slot:edit="scope">
+        <account-edit v-if="tool.checkAuth($route.name,'update')" :data="scope.data" @onSuccess="onSuccess" :type="'text'"></account-edit>
+      </template>
+      <template v-slot:use="scope">
+        <account-use v-if="tool.checkAuth($route.name,'use') && scope.data.status === 'INACTIVE'" :data="scope.data" @onSuccess="onSuccess" :type="'text'"></account-use>
+        <account-unuse v-if="tool.checkAuth($route.name,'use') && scope.data.status === 'ACTIVE'" :data="scope.data" @onSuccess="onSuccess" :type="'text'"></account-unuse>
+      </template>
+    </list>
   </div>
 </template>
 
@@ -28,6 +28,9 @@ import list from './modules/list.vue'
 import add from './modules/account_add.vue'
 import accountDel from './modules/account_delete.vue'
 import accountEdit from './modules/account_edit.vue'
+import accountUse from './modules/useAccdount.vue'
+import accountUnuse from './modules/unuseAccount.vue'
+
 import role from './modules/set_account_role.vue'
 import accountDetail from './modules/account_detail.vue'
 
@@ -38,18 +41,24 @@ export default {
     accountDel,
     accountEdit,
     accountDetail,
+    accountUse,
+    accountUnuse,
     role
   },
+  data () {
+    return {
+      accounts:[]
+    }
+  },
   methods:{
     onSuccess () {
       this.$refs.list.listData()
     },
-    rowClick (row) {
-      this.$refs.detail.queryAccountMain(row)
-    },
-    onSuccess (row) {
-      this.$refs.detail.queryAccountMain(row)
+    handleSelectionChange (arr) {
+      console.log(arr)
+      this.accounts = arr
     },
+    
   }
 }
 
@@ -57,9 +66,6 @@ export default {
 <style>
 </style>
 <style scoped>
-.container{
-  padding:20px
-}
 .borderRight{
   border-right: 1px solid #ccc;
 }

+ 85 - 109
src/HManagement/accountManage/modules/account_add.vue

@@ -1,154 +1,130 @@
 <template>
   <div>
-    <el-button size="mini" type="primary" icon="el-icon-plus" @click="drawer = true">新增账号</el-button>
+    <el-button size="small" type="primary" icon="el-icon-plus" @click="onShow">新 建</el-button>
     <el-dialog
       title="创建"
       :visible.sync="drawer"
-      width="40%">
+      width="864px">
       <div>
-        <el-row :gutter="10">
-          <el-form :model="form" size="mini" label-position="left">
-            <el-col class="normal-title" :span="24">
-              联系人信息
-            </el-col>
+        <el-row :gutter="50">
+          <el-form :model="form" :rules="rules" ref="form"  size="mini" label-position="left">
             <el-col :span="12">
-              <el-form-item label="联系人" label-width="80px">
-                <el-input v-model="form.name" autocomplete="off" placeholder="输入联系人"></el-input>
+              <el-form-item label="手机号码" label-width="100px" prop="phonenumber">
+                <el-input v-model="form.phonenumber" autocomplete="off" placeholder="输入手机号码"></el-input>
               </el-form-item>
             </el-col>
             <el-col :span="12">
-              <el-form-item label="联系方式" label-width="80px">
-                <el-input v-model="form.phonenumber" autocomplete="off" placeholder="输入联系方式"></el-input>
+              <el-form-item label="用户名称" label-width="100px" prop="name">
+                <el-input  v-model="form.name" autocomplete="off" placeholder="输入用户名称"></el-input>
               </el-form-item>
             </el-col>
-            <el-col :span="12">
-              <el-form-item label="身份证号" label-width="80px">
-                <el-input v-model="form.idcard" autocomplete="off" placeholder="输入身份证号"></el-input>
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item label="性别" label-width="80px">
+            <el-col :span="24">
+              <el-form-item label="授权角色" label-width="100px" prop="roleids">
                 <!-- <el-input v-model="form.sex" autocomplete="off" placeholder="输入性别"></el-input> -->
-                <el-select v-model="form.sex" style="width:100%" placeholder="请选择">
-                  <el-option
-                    label="女"
-                    :value="1">
-                  </el-option>
+                <el-select v-model="form.roleids" style="width:100%" placeholder="请选择" multiple>
                   <el-option
-                    label="男"
-                    :value="0">
+                    v-for="item in options"
+                    :key="item.index"
+                    :label="item.rolename"
+                    :value="item.roleid">
                   </el-option>
                 </el-select>
               </el-form-item>
             </el-col>
-            <el-col :span="12">
-              <el-form-item label="生日" label-width="80px">
-                <!-- <el-input v-model="form.birthday" autocomplete="off" placeholder="输入生日"></el-input> -->
-                <el-date-picker
-                  style="width:100%"
-                  v-model="form.birthday"
-                  align="right"
-                  type="date"
-                  placeholder="选择生日"
-                  :picker-options="pickerOptions">
-                </el-date-picker>
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item label="邮箱" label-width="80px">
-                <el-input v-model="form.email" autocomplete="off" placeholder="输入邮箱"></el-input>
-              </el-form-item>
-            </el-col>
-            <el-col :span="24">
-              <el-form-item label="备注" label-width="80px">
-                <el-input v-model="form.remarks" autocomplete="off" placeholder="输入备注"></el-input>
-              </el-form-item>
-            </el-col>
-            <el-col class="normal-title" :span="24">
-              账号信息
-            </el-col>
-            <el-col :span="24">
-              <el-form-item label="创建账号" label-width="80px">
-                <el-input v-model="form.accountno" autocomplete="off" placeholder="输入新建账号"></el-input>
-              </el-form-item>
-            </el-col>
-            <el-col :span="24">
-              <el-form-item label="账号密码" label-width="80px">
-                <el-input v-model="form.password" type="password" autocomplete="off" placeholder="输入账号密码"></el-input>
-              </el-form-item>
-            </el-col>
-            <el-col :span="24">
-              <el-form-item label="是否启用" label-width="80px">
-                <el-checkbox v-model="form.status" :true-label="1" :false-label="0">{{form.status === 1?'启用':'停用'}}</el-checkbox>
-              </el-form-item>
-            </el-col>
           </el-form>
         </el-row>
       </div>
-      <span slot="footer" class="dialog-footer">
-        <el-button type="default" size="small" @click="drawer = false">取 消</el-button>
-        <el-button type="primary" size="small" @click="onSubmit">创建账号</el-button>
-      </span>
+      <div class="dialog-footer">
+        <el-button size="small" @click="drawer = false" class="normal-btn-width">取 消</el-button>
+        <el-button size="small" type="warning" @click="onSubmit" class="normal-btn-width btn-warning">确 定</el-button>
+      </div>
     </el-dialog>
   </div>
 </template>
 
 <script>
-import md5 from 'js-md5'
 
 export default {
   data () {
     return {
       drawer:false,
-      pickerOptions: {
-        disabledDate(time) {
-          return time.getTime() > Date.now();
-        }
+      rules:{
+        phonenumber: [
+          { required: true, message: '请输入手机号码', trigger: 'blur' },
+        ],
+         name: [
+          { required: true, message: '请输入用户名称', trigger: 'blur' },
+        ],
+        roleids: [
+          { required: true, message: '请选择授权角色', trigger: 'change' }
+        ],
       },
       form:{
         "userid": 0,
-        "name": "",
-        "sex": 1,
-        "phonenumber": "",
-        "accountno": "",
+        "name": "test",
+        "phonenumber": "13732579910",
         "status": 1,
-        "password":"",
-        "birthday":"",
         "remarks":"",
-        "email":"",
-        "idcard":"",
-        "departmentid":1
-      }
+        "roleids":[]
+      },
+      options:[]
     }
   },
   methods:{
-    onSubmit () {
-      this.form.password = md5(this.form.password)
-      this.$api.requested({
-        "classname": "webmanage.users.users",
-        "method": "insertormodify_user",
-        "content": this.form
-      }).then(res=>{
-        if (res.code === 1) {
-          this.$notify({
-            title: '成功',
-            message: '账号添加成功',
-            type: 'success'
-          });
-          this.drawer = false
-          this.$emit('onSuccess')
-        } else {
-          this.$notify({
-            title: '失败',
-            message: res.data,
-            type: 'error'
-          });
+    onShow () {
+      this.drawer = true
+      this.rolelist()
+    },
+    
+    async rolelist () {
+      let param = {
+        "classname": "sysmanage.develop.optiontype.optiontype",
+        "method": "optiontypeselect",
+        "content": {
+            "pageNumber": 1,
+            "pageSize": 20,
+            "typename": "role",
+            "parameter": {
+            }
         }
-      })
-    }
+      }
+      const res = await this.$api.requested(param)
+      this.options = res.data
+    },
+
+    onSubmit () {
+      this.$refs['form'].validate((valid) => {
+        if (!valid) return false
+        this.$api.requested({
+          "classname": "webmanage.users.users",
+          "method": "insertormodify_user",
+          "content": this.form
+        }).then(res=>{
+          if (res.code === 1) {
+            this.$notify({
+              title: '成功',
+              message: '账号添加成功',
+              type: 'success'
+            });
+            this.drawer = false
+            this.$emit('onSuccess')
+          } else {
+            this.$notify({
+              title: '失败',
+              message: res.data,
+              type: 'error'
+            });
+          }
+        })
+      });
+    },
   }
 }
 
 </script>
-<style>
+<style scoped>
+.dialog-footer{
+  margin-top:32px;
+  text-align: center;
+}
 </style>

+ 4 - 4
src/HManagement/accountManage/modules/account_delete.vue

@@ -1,21 +1,21 @@
 <template>
   <div style="display:inline">
     <el-popconfirm
-      title="确定删除吗?"
+      title="确定删除当前选中账号吗?"
       @confirm="deleteRow()">
-      <el-button slot="reference" type="danger" size="mini" icon="el-icon-delete">删 除</el-button>
+      <el-button slot="reference" size="small" :type="type">删 除</el-button>
     </el-popconfirm>
   </div>
 </template>
 
 <script>
 export default {
-  props:['data'],
+  props:['data','type'],
   methods:{
     deleteRow () {
       this.$api.requested({
         "classname": "webmanage.users.users",
-        "method": "delete_user",
+        "method": "deleteUserSite",
         "content": {
           "userid":this.data.userid
         }

+ 82 - 61
src/HManagement/accountManage/modules/account_detail.vue

@@ -1,84 +1,105 @@
 <template>
-  <div class="account-detail">
-    <el-descriptions :column="2">
-      <div slot="title" style="flex:1" class="flex-align-center flex-between">
-        <p>联系人信息</p>
-        <div>
-          <slot name="edit" :data="infos"></slot>
-          <slot name="del" :data="infos"></slot>
-        </div>
-      </div>
-      <el-descriptions-item label="联系人">{{infos.name}}</el-descriptions-item>
-      <el-descriptions-item label="联系方式">{{infos.phonenumber}}</el-descriptions-item>
-      <el-descriptions-item label="身份证号">{{infos.idcard}}</el-descriptions-item>
-      <el-descriptions-item label="性别">{{infos.sex === 0?'男':'女'}}</el-descriptions-item>
-      <el-descriptions-item label="生日">{{infos.birthday}}</el-descriptions-item>
-      <el-descriptions-item label="邮箱">{{infos.email}}</el-descriptions-item>
-      <el-descriptions-item label="备注">
-        {{infos.remarks}}
-      </el-descriptions-item>
-    </el-descriptions>
-    <!-- <el-divider></el-divider> -->
-    <el-descriptions title="账号信息" :column="1" style="margin-top:10px">
-      <el-descriptions-item label="账 号">{{infos.accountno}}</el-descriptions-item>
-      <!-- <el-descriptions-item label="密 码">{{infos.password}}</el-descriptions-item> -->
-      <el-descriptions-item label="启 用">{{infos.status === 'ACTIVE'?'启用':'停用'}}</el-descriptions-item>
-    </el-descriptions>
-    <el-descriptions style="margin-top:10px">
-      <div slot="title" style="flex:1" class="flex-align-center flex-between">
-        <p>角色信息</p>
-        <div>
-          <slot name="role" :data="infos"></slot>
-        </div>
-      </div>
-    </el-descriptions>
-    <el-table
-      :data="infos['userrole']"
-      style="width: 100%"
-      size="mini"
-      stripe
-      border
-      :header-cell-style="{background:'#f1f2f3',color:'#333'}">
-      <el-table-column
-        prop="rolename"
-        label="名称"
-        width="180">
-      </el-table-column>
-      <el-table-column
-        prop="remarks"
-        label="描述">
-      </el-table-column>
-    </el-table>
+  <div class="container normal-panel">
+    <div class="mb-40">
+      <p class="title flex-align-center flex-between">
+        <span>用户信息</span>
+        <i class="el-icon-refresh" @click="userMian"></i>
+      </p>
+      <tableLayout :layout="table_userinfo" :data="list" :opwidth="200" :custom="true">
+        <template v-slot:customcol="scope">
+          <p v-if="scope.column.columnname === 'status'">
+            <span :style="scope.column.data.status === 'ACTIVE'?'color:#52C41A':'color:#FF3B30'">{{scope.column.data.status === 'ACTIVE'?'启用':scope.column.data.status === 'INACTIVE'?'停用':'其他'}}</span>
+          </p>
+          <p v-else>{{scope.column.data[scope.column.columnname]}}</p>
+        </template>
+      </tableLayout>
+    </div>
+    <div class="mb-40">
+      <p class="title">员工信息</p>
+      <tableLayout :layout="table_hrinfo" :data="hrmsg" :opwidth="200" :custom="false"></tableLayout>
+    </div>
+    <div class="mb-40">
+      <p class="title">用户角色</p>
+      <tableLayout :layout="table_roleinfo" :data="roleData" :opwidth="200" :custom="false">
+        <template v-slot:opreation="scope">
+          <el-button type="text" size="small" @click="$router.push({path:'/roleDetails',query:{id:scope.data.roleid}})">详 情</el-button>
+        </template>
+      </tableLayout>
+    </div>
   </div>
 </template>
 
 <script>
+import tableLayout from '../../../components/dynamic-table'
+
 export default {
+  components:{
+    tableLayout
+  },
   data () {
     return {
-      infos:{},
-      activeName:0
+      minaInfo:{},
+      table_userinfo:[],
+      table_hrinfo:[],
+      table_roleinfo:[],
+      list:[],
+      hrmsg:[],
+      roleData:[]
     }
   },
   methods:{
-    queryAccountMain (row) {
-      this.$api.requested({
+    async userMian () {
+      const res = await this.$api.requested({
         "classname": "webmanage.users.users",
         "method": "query_userMain",
         "content": {
-          "userid":row.userid
+            "userid": this.$route.query.id
         }
-      }).then(res=>{
-        this.infos = Object.assign({},this.infos,res.data[0])
-        // this.querySite()
       })
-    },
+      // 插入用户数据
+      let arr = [{
+        accountno:res.data[0].accountno,
+        phonenumber:res.data[0].phonenumber,
+        usertypename:res.data[0].usertypename,
+        status:res.data[0].status
+      }]
+      this.list = arr
+      // 插入人员数据
+      if (typeof(res.data[0].hrmsg) === 'object'){
+        res.data[0].hrmsg.systemname = res.data[0].name
+        let hrmsg = [res.data[0].hrmsg]
+        this.hrmsg = hrmsg
+      }
+      // 插入角色数据
+      this.roleData = res.data[0].userrole
+    }
+  },
+  mounted () {
+    this.userMian()
+    // 获取用户信息表结构
+    this.table_userinfo = this.tool.tabelCol(this.$route.name).detailUserinfo.tablecols
+    // 获取人员表结构
+    this.table_hrinfo = this.tool.tabelCol(this.$route.name).detailHrInfo.tablecols
+    // 获取角色表结构
+    this.table_roleinfo = this.tool.tabelCol(this.$route.name).detailRoleInfo.tablecols
   }
 }
 
 </script>
 <style>
-.account-detail .el-descriptions__header {
-  display: block !important;
+</style>
+<style scoped>
+.title{
+  height: 20px;
+  line-height: 20px;
+  font-size: 14px;
+  text-indent: 7px;
+  font-weight: bold;
+  color: #333333;
+  margin-bottom: 20px;
+  border-left: 4px solid #3874F6;
+}
+.mb-40{
+  margin-bottom:40px
 }
 </style>

+ 81 - 183
src/HManagement/accountManage/modules/account_edit.vue

@@ -1,99 +1,42 @@
 <template>
-  <div style="display:inline">
-    <el-button size="mini" type="primary" icon="el-icon-edit" @click="onShow">编 辑</el-button>
+  <div class="inline-16">
+    <el-button size="small" type="text" @click="onShow">编 辑</el-button>
     <el-dialog
       title="编辑"
       :visible.sync="drawer"
-      width="40%">
+      width="864px">
       <div>
-        <el-row :gutter="10">
-          <el-form :model="form" size="mini" label-position="left">
-            <el-col class="normal-title" :span="24">
-              联系人信息
-            </el-col>
-            <el-col :span="12">
-              <el-form-item label="联系人" label-width="80px">
-                <el-input v-model="form.name" autocomplete="off" placeholder="输入联系人"></el-input>
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item label="联系方式" label-width="80px">
-                <el-input v-model="form.phonenumber" autocomplete="off" placeholder="输入联系方式"></el-input>
-              </el-form-item>
-            </el-col>
+        <el-row :gutter="50">
+          <el-form :model="form" :rules="rules" ref="form"  size="mini" label-position="left">
             <el-col :span="12">
-              <el-form-item label="身份证号" label-width="80px">
-                <el-input v-model="form.idcard" autocomplete="off" placeholder="输入身份证号"></el-input>
+              <el-form-item label="账号" label-width="100px">
+                <el-input v-model="form.accountno" readonly autocomplete="off" placeholder="输入账号"></el-input>
               </el-form-item>
             </el-col>
             <el-col :span="12">
-              <el-form-item label="性别" label-width="80px">
-                <!-- <el-input v-model="form.sex" autocomplete="off" placeholder="输入性别"></el-input> -->
-                <el-select v-model="form.sex" style="width:100%" placeholder="请选择">
-                  <el-option
-                    label="女"
-                    :value="1">
-                  </el-option>
-                  <el-option
-                    label="男"
-                    :value="0">
-                  </el-option>
-                </el-select>
+              <el-form-item label="手机号码" label-width="100px" prop="phonenumber">
+                <el-input v-model="form.phonenumber" autocomplete="off" placeholder="输入手机号码"></el-input>
               </el-form-item>
             </el-col>
             <el-col :span="12">
-              <el-form-item label="生日" label-width="80px">
-                <!-- <el-input v-model="form.birthday" autocomplete="off" placeholder="输入生日"></el-input> -->
-                <el-date-picker
-                  style="width:100%"
-                  v-model="form.birthday"
-                  align="right"
-                  type="date"
-                  value-format="yyyy-MM-dd"
-                  placeholder="选择生日"
-                  :picker-options="pickerOptions">
-                </el-date-picker>
+              <el-form-item label="用户类型" label-width="100px">
+                <el-input v-model="form.usertypename" readonly autocomplete="off" placeholder="用户类型"></el-input>
               </el-form-item>
             </el-col>
             <el-col :span="12">
-              <el-form-item label="邮箱" label-width="80px">
-                <el-input v-model="form.email" autocomplete="off" placeholder="输入邮箱"></el-input>
-              </el-form-item>
-            </el-col>
-            <el-col :span="24">
-              <el-form-item label="备注" label-width="80px">
-                <el-input v-model="form.remarks" autocomplete="off" placeholder="输入备注"></el-input>
-              </el-form-item>
-            </el-col>
-            <el-col class="normal-title" :span="24">
-              账号信息
-            </el-col>
-            <el-col :span="24">
-              <el-form-item label="创建账号" label-width="80px">
-                <el-input v-model="form.accountno" autocomplete="off" placeholder="输入新建账号"></el-input>
-              </el-form-item>
-            </el-col>
-            <el-col :span="24">
-              <el-form-item label="账号密码" label-width="80px">
-                <el-input v-model="form.password" type="password" autocomplete="off" placeholder="输入账号密码"></el-input>
-              </el-form-item>
-            </el-col>
-            <el-col :span="24">
-              <el-form-item label="是否启用" label-width="80px">
-                <el-checkbox v-model="form.status" true-label="ACTIVE" false-label="INACTIVE">{{form.status === 'ACTIVE'?'启用':'停用'}}</el-checkbox>
+              <el-form-item label="用户名称" label-width="100px" prop="name">
+                <el-input  v-model="form.name" autocomplete="off" placeholder="输入用户名称"></el-input>
               </el-form-item>
             </el-col>
-            <el-col class="normal-title" :span="24">
-              添加归属站点
-            </el-col>
             <el-col :span="24">
-              <el-form-item label="站点" label-width="80px">
-                <el-select v-model="siteSeletion" style="width:100%" multiple placeholder="请选择" @visible-change="onChange" @remove-tag="removeTag">
+              <el-form-item label="授权角色" label-width="100px" prop="roleids">
+                <!-- <el-input v-model="form.sex" autocomplete="off" placeholder="输入性别"></el-input> -->
+                <el-select v-model="form.roleids" style="width:100%" placeholder="请选择" multiple>
                   <el-option
-                    v-for="item in sitelist"
-                    :key="item.siteuid"
-                    :label="item.sitename"
-                    :value="item.siteid">
+                    v-for="item in options"
+                    :key="item.index"
+                    :label="item.rolename"
+                    :value="item.roleid">
                   </el-option>
                 </el-select>
               </el-form-item>
@@ -101,144 +44,99 @@
           </el-form>
         </el-row>
       </div>
-      <span slot="footer" class="dialog-footer">
-         <el-button type="default" size="small" @click="drawer = false">取 消</el-button>
-          <el-button type="primary" size="small" @click="onSubmit">保存信息</el-button>
-      </span>
+      <div class="dialog-footer">
+        <el-button size="small" @click="drawer = false" class="normal-btn-width">取 消</el-button>
+        <el-button size="small" type="warning" @click="onSubmit" class="normal-btn-width btn-warning">确 定</el-button>
+      </div>
     </el-dialog>
   </div>
 </template>
 
 <script>
-import md5 from 'js-md5'
 
 export default {
   props:['data'],
   data () {
     return {
       drawer:false,
-      pickerOptions: {
-        disabledDate(time) {
-          return time.getTime() > Date.now();
-        }
+      rules:{
+        phonenumber: [
+          { required: true, message: '请输入手机号码', trigger: 'blur' },
+        ],
+         name: [
+          { required: true, message: '请输入用户名称', trigger: 'blur' },
+        ],
+        roleids: [
+          { required: true, message: '请选择授权角色', trigger: 'change' }
+        ],
       },
       form:{
         "userid": 0,
         "name": "",
-        "sex": 1,
         "phonenumber": "",
-        "accountno": "",
         "status": 1,
-        "password":"",
-        "birthday":"",
         "remarks":"",
-        "email":"",
-        "idcard":"",
-        "departmentid":1
+        "roleids":[]
       },
-      sitelist:[],
-      siteSeletion:[]
+      options:[]
     }
   },
   methods:{
-    queryAccountMain () {
-      this.$api.requested({
-        "classname": "webmanage.users.users",
-        "method": "query_userMain",
-        "content": {
-          "userid":this.data.userid
-        }
-      }).then(res=>{
-        this.form = Object.assign({},this.form,res.data[0])
-        this.siteSeletion = []
-        this.form.usersite.map(e=>{
-          this.siteSeletion.push(e.siteid)
-        })
-        this.querySite()
-      })
-    },
-    onSubmit () {
-      this.form.password = md5(this.form.password)
-      this.$api.requested({
-        "classname": "webmanage.users.users",
-        "method": "insertormodify_user",
-        "content": this.form
-      }).then(res=>{
-        if (res.code === 1) {
-          this.$notify({
-            title: '成功',
-            message: '账号添加成功',
-            type: 'success'
-          });
-          this.drawer = false
-          this.$emit('onSuccess')
-        } else {
-          this.$notify({
-            title: '失败',
-            message: res.data,
-            type: 'error'
-          });
-        }
-      })
-    },
     onShow () {
       this.drawer = true
-      this.queryAccountMain()
-    },
-    // 站点查询
-    querySite () {
-      this.$api.requested({
-        "classname": "sysmanage.site.site",
-        "method": "query_siteList",
-        "content": {
-            "pageNumber": 1,
-            "pageSize": 100
-        }
-      }).then(res=>{
-        this.sitelist = res.data
-      })
+      this.form = Object.assign({},this.form,this.data)
+      this.rolelist()
     },
-    onChange (val) {
+    
+    async rolelist () {
       let param = {
-        "classname": "webmanage.users.users",
-        "method": "addUserSite",
+        "classname": "sysmanage.develop.optiontype.optiontype",
+        "method": "optiontypeselect",
         "content": {
-            "userid": this.form.userid,
-            "siteids":this.siteSeletion
+            "pageNumber": 1,
+            "pageSize": 20,
+            "typename": "role",
+            "parameter": {
+            }
         }
       }
-      !val ? this.$api.requested(param).then(res=>{
-        res.code == 1?'':this.$notify({
-            title: '失败',
-            message: res.data,
-            type: 'error'
-          });
-      }) : ''
+      const res = await this.$api.requested(param)
+      this.options = res.data
+    },
+
+    onSubmit () {
+      this.$refs['form'].validate((valid) => {
+        if (!valid) return false
+        this.$api.requested({
+          "classname": "webmanage.users.users",
+          "method": "insertormodify_user",
+          "content": this.form
+        }).then(res=>{
+          if (res.code === 1) {
+            this.$notify({
+              title: '成功',
+              message: '账号添加成功',
+              type: 'success'
+            });
+            this.drawer = false
+            this.$emit('onSuccess')
+          } else {
+            this.$notify({
+              title: '失败',
+              message: res.data,
+              type: 'error'
+            });
+          }
+        })
+      });
     },
-    removeTag (val) {
-      let param = {
-        "classname": "webmanage.users.users",
-        "method": "deleteUserSite",
-        "content": {
-            "userid": this.form.userid,
-            "siteid":val
-        }
-      }
-      this.$api.requested(param).then(res=>{
-        res.code == 1?this.$notify({
-            title: '成功',
-            message: '删除成功',
-            type: 'success'
-          }):this.$notify({
-            title: '失败',
-            message: res.data,
-            type: 'error'
-          });
-      })
-    }
   }
 }
 
 </script>
-<style>
+<style scoped>
+.dialog-footer{
+  margin-top:32px;
+  text-align: center;
+}
 </style>

+ 69 - 51
src/HManagement/accountManage/modules/list.vue

@@ -1,48 +1,35 @@
 <template>
-  <div>
-    <div class="flex-align-center flex-between" style="margin-bottom:10px">
-      <slot name="add"></slot>
-      <div class="flex-align-center search-panel">
-        <!-- <el-input size="small" placeholder="请输入搜索内容"></el-input>&nbsp;<el-button size="small" type="">查询</el-button> -->
-        <el-input size="small" placeholder="请输入查询内容" v-model="value">
-          <template slot="append"><i class="el-icon-search"></i>查询</template>
-        </el-input>
+  <div class="container normal-panel">
+    <!-- 表格搜索 -->
+    <div class="flex-align-center search-panel" style="margin-bottom:16px">
+      <div class="flex-align-center">
+        <p>搜索:</p>
+        <el-input size="small" placeholder="请输入查询内容" @blur="listData('search')" @clear="listData('search')" v-model="param.content.where.condition" prefix-icon="el-icon-search" clearable></el-input>
+      </div>
+      <div class="flex-align-center" style="margin-left:30px">
+        <p>状态:</p>
+        <el-select style="width:120px;" size="small" v-model="status" placeholder="请选择" @change="listData('search')">
+          <el-option v-for="item in select" :label="item.remarks" :value="item.value" :key="item.index"></el-option>
+        </el-select>
       </div>
     </div>
-    <el-table
-      :data="list"
-      style="width: 100%"
-      size="mini"
-      highlight-current-row
-      border
-      :header-cell-style="{background:'#f1f2f3',color:'#333'}"
-      @row-click="rowClick">
-      <el-table-column
-        prop="accountno"
-        label="账号">
-      </el-table-column>
-      <el-table-column
-        prop="name"
-        label="联系人">
-      </el-table-column>
-      <el-table-column
-        prop="phonenumber"
-        label="联系电话">
-      </el-table-column>
-      <el-table-column
-        label="站点">
-        <template slot-scope="scope">
-          <el-tag v-for="item in scope.row.usersite" :key="item.index" size="mini" type="primary" effect="dark" style="margin:0 2px">{{item.sitename}}</el-tag>
-        </template>
-      </el-table-column>
-      <el-table-column
-        label="状态">
-        <template slot-scope="scope">
-          <el-tag size="mini" :type="scope.row.status === 'ACTIVE'?'success':'info'" effect="dark">{{scope.row.status === 'ACTIVE'?'启用中':scope.row.status}}</el-tag>
-        </template>
-      </el-table-column>
-    </el-table>
-    <div style="margin:20px 0">
+    <!-- 表格主题 -->
+    <tableLayout :layout="tablecols" :data="list" :opwidth="200" :custom="true" :height="tableHieght">
+      <template v-slot:customcol="scope">
+        <p v-if="scope.column.columnname === 'status'">
+          <span :style="scope.column.data.status === 'ACTIVE'?'color:#52C41A':'color:#FF3B30'">{{scope.column.data.status === 'ACTIVE'?'启用':scope.column.data.status === 'INACTIVE'?'停用':'其他'}}</span>
+        </p>
+        <p v-else>{{scope.column.data[scope.column.columnname]}}</p>
+      </template>
+      <template v-slot:opreation="scope">
+        <slot name="detail" :data="scope.data"></slot>
+        <slot name="edit" :data="scope.data"></slot>
+        <slot name="use" :data="scope.data"></slot>
+        <!-- <el-button size="mini" type="text"  @click="onDelete(scope)">删 除</el-button> -->
+        <slot name="del" :data="scope.data"></slot>
+      </template>
+    </tableLayout>
+    <div style="margin-top:16px;text-align:right">
       <el-pagination
         background
         small
@@ -58,7 +45,11 @@
 </template>
 
 <script>
+import tableLayout from '../../../components/dynamic-table'
 export default {
+  components:{
+    tableLayout
+  },
   data () {
     return {
       param:{
@@ -68,10 +59,14 @@ export default {
           "pageNumber": 1,
           "pageSize": 20,
           "where":{
-            "condition":""
+            "condition":"",
+            "status":''
           }
         }
       },
+      status:'ALL',
+      select:[],
+      tablecols:[],
       list:[],
       total:0,
       currentPage:0,
@@ -79,14 +74,32 @@ export default {
     }
   },
   methods:{
-    listData () {
+    listData (issearch) {
+      issearch === 'search'?this.param.content.pageNumber = 1:''
+
+      this.param.content.where.status = this.status === 'ALL'? '':this.status
+
       this.$api.requested(this.param).then(res=>{
         this.list = res.data
         this.total = res.total
         this.currentPage = res.pageNumber
-        this.rowClick(res.data[0])
       })
     },
+    async userstatus () {
+      let param = {
+        "classname": "sysmanage.develop.optiontype.optiontype",
+        "method": "optiontypeselect",
+        "content": {
+            "pageNumber": 1,
+            "pageSize": 20,
+            "typename": "userstatus",
+            "parameter": {
+            }
+        }
+      }
+      const res = await this.$api.requested(param)
+      this.select = res.data
+    },
     handleSizeChange(val) {
       // console.log(`每页 ${val} 条`);
       this.param.content.pageSize = val
@@ -97,12 +110,14 @@ export default {
       this.param.content.pageNumber = val
       this.listData()
     },
-    rowClick (row) {
-      this.$emit('rowClick',row)
+    handleSelectionChange (selecttion) {
+      this.$emit('handleSelectionChange',selecttion)
     }
   },
   mounted () {
     this.listData()
+    this.userstatus()
+    this.tablecols = this.tool.tabelCol(this.$route.name).accountTable.tablecols
   }
 }
 
@@ -116,8 +131,11 @@ export default {
 }
 </style>
 <style scoped>
-.search-panel{
-  width: 300px;
-  /* margin-bottom: 10px; */
+.search-panel p{
+  flex: 1 0 auto;
+  width:40px;
+  font-size:14px
 }
-</style>
+</style>
+
+

+ 28 - 0
src/HManagement/accountManage/modules/unuseAccount.vue

@@ -0,0 +1,28 @@
+<template>
+  <div class="inline-16">
+    <el-popconfirm
+      title="确定停用当前选中账号吗?"
+      @confirm="stop()">
+      <el-button slot="reference" size="small" type="text">停 用</el-button>
+    </el-popconfirm>
+  </div>
+</template>
+
+<script>
+export default {
+  props:['data'],
+  methods:{
+    async stop () {
+     const res = await this.$api.requested({"classname": "webmanage.users.users",
+        "method": "changeStatus",
+        "content": {
+          "userid": this.data.userid,
+          "isactive": 0
+        }
+      })
+      this.$emit('onSuccess')
+    },
+  }
+}
+
+</script>

+ 28 - 0
src/HManagement/accountManage/modules/useAccdount.vue

@@ -0,0 +1,28 @@
+<template>
+  <div class="inline-16">
+    <el-popconfirm
+      title="确定启用当前选中账号吗?"
+      @confirm="start()">
+      <el-button slot="reference" type="text" size="small">启 用</el-button>
+    </el-popconfirm>
+  </div>
+</template>
+
+<script>
+export default {
+  props:['data'],
+  methods:{
+    async start () {
+      const res = await this.$api.requested({"classname": "webmanage.users.users",
+        "method": "changeStatus",
+        "content": {
+          "userid": this.data.userid,
+          "isactive": 1
+        }
+      })
+      this.$emit('onSuccess')
+    },
+  }
+}
+
+</script>

+ 0 - 12
src/HManagement/notice/index.vue

@@ -1,12 +0,0 @@
-<template>
-  <div></div>
-</template>
-
-<script>
-export default {
-
-}
-
-</script>
-<style>
-</style>

+ 51 - 0
src/HManagement/notice/notice_mag/index.vue

@@ -0,0 +1,51 @@
+<template>
+  <div>
+    <div class="container normal-panel normal-margin">
+      <add style="margin-right:10px;" v-if="tool.checkAuth($route.name,'insert')" slot="add" @onSuccess="onSuccess"></add>
+    </div>
+    <list ref="list">
+      <template v-slot:release="scope">
+        <release v-if="tool.checkAuth($route.name,'update')"  :data="scope.data.data" @onSuccess="onSuccess"></release>
+      </template>
+      <template v-slot:topping="scope">
+        <topping v-if="tool.checkAuth($route.name,'update')" :data="scope.data.data" @onSuccess="onSuccess"></topping>
+      </template>
+      <template v-slot:del="scope">
+        <on-del v-if="tool.checkAuth($route.name,'delete')" :data="scope.data.data" @onSuccess="onSuccess"></on-del>
+      </template>
+    </list>
+  </div>
+</template>
+
+<script>
+import list from './modules/list.vue'
+import add from './modules/notice_add.vue'
+import release from './modules/release.vue'
+import topping from './modules/tp.vue'
+import onDel from './modules/delete.vue'
+
+export default {
+  components:{
+    list,
+    add,
+    release,
+    topping,
+    onDel
+  },
+  methods:{
+    onSuccess () {
+      this.$refs.list.listData()
+    }
+  }
+}
+
+</script>
+<style>
+</style>
+<style scoped>
+.search-panel p{
+  flex: 1 0 auto;
+  width:40px;
+  font-size:14px
+}
+</style>

+ 29 - 0
src/HManagement/notice/notice_mag/modules/delete.vue

@@ -0,0 +1,29 @@
+<template>
+  <div style="display:inline;margin:0 16px">
+    <el-popconfirm
+      title="确定删除当前通告吗?"
+      @confirm="deleteRow()">
+      <el-button slot="reference" size="small" type="text">删 除</el-button>
+    </el-popconfirm>
+  </div>
+</template>
+
+<script>
+export default {
+  props:['data'],
+  methods:{
+    deleteRow () {
+      this.$api.requested({
+        "classname": "webmanage.saletool.notice.notice",
+        "method": "delete",
+        "content": {
+          "sat_noticeid":this.data.sat_noticeid
+        }
+      }).then(res=>{
+        this.$emit('onSuccess')
+      })
+    },
+  }
+}
+
+</script>

+ 106 - 0
src/HManagement/notice/notice_mag/modules/list.vue

@@ -0,0 +1,106 @@
+<template>
+  <div class="container normal-panel">
+    <!-- 表格搜索 -->
+    <div class="flex-align-center search-panel" style="margin-bottom:16px">
+      <div class="flex-align-center">
+        <p>搜索:</p>
+        <el-input size="small" placeholder="请输入查询内容" @blur="listData('search')" @clear="listData('search')" v-model="params.content.where.condition" prefix-icon="el-icon-search" clearable></el-input>
+      </div>
+    </div>
+    <!-- 表格主题 -->
+    <tableLayout :layout="tablecols" :data="list" :opwidth="200" :custom="true" :height="tableHieght">
+      <template v-slot:customcol="scope">
+        <div v-if="scope.column.columnname === 'status'">
+          <span v-if="scope.column.data.isontop === 1" style="color:#FF3B30">置顶</span>
+          <div v-else>
+            <span v-if="scope.column.data[scope.column.columnname] === '发布'" style="color:#52C41A">{{scope.column.data[scope.column.columnname]}}</span>
+            <span v-else>{{scope.column.data[scope.column.columnname]}}</span>
+          </div>
+        </div>
+        <p v-else>{{scope.column.data[scope.column.columnname]}}</p>
+      </template>
+      <template v-slot:opreation="scope">
+        <el-button size="mini" type="text" @click="onEdit(scope)">编 辑</el-button>
+        <slot name="release" :data="scope"></slot>
+        <slot name="topping" :data="scope"></slot>
+        <el-button size="mini" type="text" @click="onEdit(scope)">查看留言</el-button>
+        <el-button size="mini" type="text" @click="onEdit(scope)">数据统计</el-button>
+        <!-- <el-button size="mini" type="text"  @click="onDelete(scope)">删 除</el-button> -->
+        <slot name="del" :data="scope"></slot>
+      </template>
+    </tableLayout>
+    <div style="margin-top:16px;text-align:right">
+      <el-pagination
+        background
+        small
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+        :current-page="currentPage"
+        :page-size="params.content.pageSize"
+        layout="total, prev, pager, next, jumper"
+        :total="total">
+      </el-pagination>
+    </div>
+  </div>
+</template>
+
+<script>
+import tableLayout from '../../../../components/dynamic-table'
+
+export default {
+  components:{
+    tableLayout
+  },
+  data () {
+    return {
+      params:{
+        "classname": "webmanage.saletool.notice.notice",
+        "method": "queryNoticeList",
+        "content": {
+          "pageNumber": 1,
+          "pageSize": 10,
+          "where":{
+            "condition":""
+          }
+        }
+      },
+      tablecols:{},
+      list:[],
+      total:0,
+      currentPage:0,
+    }
+  },
+  methods:{
+    async listData () {
+      const res = await this.$api.requested(this.params)
+      this.list = res.data
+      this.total = res.total
+      this.currentPage = res.pageNumber
+    },
+    handleSizeChange(val) {
+      // console.log(`每页 ${val} 条`);
+      this.params.content.pageSize = val
+      this.listData()
+    },
+    handleCurrentChange(val) {
+      // console.log(`当前页: ${val}`);
+      this.params.content.pageNumber = val
+      this.listData()
+    },
+  },
+  mounted () {
+    this.listData()
+    this.tablecols = this.tool.tabelCol(this.$route.name).noticeTable.tablecols
+  }
+}
+
+</script>
+<style>
+</style>
+<style scoped>
+.search-panel p{
+  flex: 1 0 auto;
+  width:40px;
+  font-size:14px
+}
+</style>

+ 154 - 0
src/HManagement/notice/notice_mag/modules/notice_add.vue

@@ -0,0 +1,154 @@
+<template>
+  <div>
+    <el-button size="small" type="primary" icon="el-icon-plus" @click="drawer = true">新建</el-button>
+    <el-dialog
+      title="创建"
+      :visible.sync="drawer"
+      width="40%">
+      <div>
+        <el-row :gutter="10">
+          <el-form :model="form" size="mini" label-position="left">
+            <el-col class="normal-title" :span="24">
+              联系人信息
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="联系人" label-width="80px">
+                <el-input v-model="form.name" autocomplete="off" placeholder="输入联系人"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="联系方式" label-width="80px">
+                <el-input v-model="form.phonenumber" autocomplete="off" placeholder="输入联系方式"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="身份证号" label-width="80px">
+                <el-input v-model="form.idcard" autocomplete="off" placeholder="输入身份证号"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="性别" label-width="80px">
+                <!-- <el-input v-model="form.sex" autocomplete="off" placeholder="输入性别"></el-input> -->
+                <el-select v-model="form.sex" style="width:100%" placeholder="请选择">
+                  <el-option
+                    label="女"
+                    :value="1">
+                  </el-option>
+                  <el-option
+                    label="男"
+                    :value="0">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="生日" label-width="80px">
+                <!-- <el-input v-model="form.birthday" autocomplete="off" placeholder="输入生日"></el-input> -->
+                <el-date-picker
+                  style="width:100%"
+                  v-model="form.birthday"
+                  align="right"
+                  type="date"
+                  placeholder="选择生日"
+                  :picker-options="pickerOptions">
+                </el-date-picker>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="邮箱" label-width="80px">
+                <el-input v-model="form.email" autocomplete="off" placeholder="输入邮箱"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item label="备注" label-width="80px">
+                <el-input v-model="form.remarks" autocomplete="off" placeholder="输入备注"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col class="normal-title" :span="24">
+              账号信息
+            </el-col>
+            <el-col :span="24">
+              <el-form-item label="创建账号" label-width="80px">
+                <el-input v-model="form.accountno" autocomplete="off" placeholder="输入新建账号"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item label="账号密码" label-width="80px">
+                <el-input v-model="form.password" type="password" autocomplete="off" placeholder="输入账号密码"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item label="是否启用" label-width="80px">
+                <el-checkbox v-model="form.status" :true-label="1" :false-label="0">{{form.status === 1?'启用':'停用'}}</el-checkbox>
+              </el-form-item>
+            </el-col>
+          </el-form>
+        </el-row>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button type="default" size="small" @click="drawer = false">取 消</el-button>
+        <el-button type="primary" size="small" @click="onSubmit">创建账号</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import md5 from 'js-md5'
+
+export default {
+  data () {
+    return {
+      drawer:false,
+      pickerOptions: {
+        disabledDate(time) {
+          return time.getTime() > Date.now();
+        }
+      },
+      form:{
+        "userid": 0,
+        "name": "",
+        "sex": 1,
+        "phonenumber": "",
+        "accountno": "",
+        "status": 1,
+        "password":"",
+        "birthday":"",
+        "remarks":"",
+        "email":"",
+        "idcard":"",
+        "departmentid":1
+      }
+    }
+  },
+  methods:{
+    onSubmit () {
+      this.form.password = md5(this.form.password)
+      this.$api.requested({
+        "classname": "webmanage.users.users",
+        "method": "insertormodify_user",
+        "content": this.form
+      }).then(res=>{
+        if (res.code === 1) {
+          this.$notify({
+            title: '成功',
+            message: '账号添加成功',
+            type: 'success'
+          });
+          this.drawer = false
+          this.$emit('onSuccess')
+        } else {
+          this.$notify({
+            title: '失败',
+            message: res.data,
+            type: 'error'
+          });
+        }
+      })
+    }
+  }
+}
+
+</script>
+<style>
+</style>

+ 43 - 0
src/HManagement/notice/notice_mag/modules/release.vue

@@ -0,0 +1,43 @@
+<template>
+  <div class="inline-16">
+    <el-button type="text" size="mini" @click="releaseNotice">{{data.status === '发布'?'取消发布':'发布'}}</el-button>
+  </div>
+</template>
+
+<script>
+export default {
+  props:['data'],
+  data () {
+    return {}
+  },
+  methods:{
+    async releaseNotice () {
+      const res = await this.$api.requested({
+        "classname": "webmanage.saletool.notice.notice",
+        "method": this.data.status === "发布"?"undercarriage":"release",
+        "content": {
+          "sat_noticeids":[this.data.sat_noticeid]
+        }
+      })
+      console.log(res)
+      if (res.code === 1) {
+        this.$notify({
+          title: '成功',
+          message: this.data.status === "发布"?'下架成功':'发布成功',
+          type: 'success'
+        });
+        this.$emit('onSuccess')
+      } else {
+        this.$notify({
+          title: '失败',
+          message: res.data,
+          type: 'error'
+        });
+      }
+    }
+  }
+}
+
+</script>
+<style>
+</style>

+ 43 - 0
src/HManagement/notice/notice_mag/modules/tp.vue

@@ -0,0 +1,43 @@
+<template>
+  <div class="inline-16">
+    <el-button type="text" size="mini" @click="releaseNotice">{{data.isontop === 0?'置顶':'取消置顶'}}</el-button>
+  </div>
+</template>
+
+<script>
+export default {
+  props:['data'],
+  data () {
+    return {}
+  },
+  methods:{
+    async releaseNotice () {
+      const res = await this.$api.requested({
+        "classname": "webmanage.saletool.notice.notice",
+        "method": this.data.isontop === 0?"topping":"cancelTopping",
+        "content": {
+          "sat_noticeid":this.data.sat_noticeid
+        }
+      })
+      console.log(res)
+      if (res.code === 1) {
+        this.$notify({
+          title: '成功',
+          message: this.data.status === "发布"?'取消成功':'置顶成功',
+          type: 'success'
+        });
+        this.$emit('onSuccess')
+      } else {
+        this.$notify({
+          title: '失败',
+          message: res.data,
+          type: 'error'
+        });
+      }
+    }
+  }
+}
+
+</script>
+<style>
+</style>

+ 15 - 29
src/HManagement/roleManage/index.vue

@@ -1,43 +1,29 @@
 <template>
-  <div class="container normal-panel">
-    <list ref="list" @onRowClick="onRowClick" @deleteClick="deleteClick">
-      <add v-if="tool.checkAuth($route.name,'insert')" style="margin-bottom:10px" slot="add" @onSuccess="onSuccess"> </add>
-      <role-details ref="roledetails" slot="details">
-        <template v-slot:edit="scope">
-          <edit v-if="tool.checkAuth($route.name,'update')" style="margin-right:10px" :data="scope.data" @onSuccess="onSuccess"></edit>
-        </template>
-        <template v-slot:del="scope">
-          <role-del v-if="tool.checkAuth($route.name,'delete')" :data="scope.data" @onSuccess="onSuccess"></role-del>
-        </template>
-        <template v-slot:auth="scope">
-          <authList v-if="tool.checkAuth($route.name,'auth')" :data="scope.data" @onSuccess="refreshRoleMain"></authList>
+  <div>
+    <add class="container normal-panel" style="margin-bottom:16px"></add>
+    <div class="container normal-panel">
+      <list ref="list" @onRowClick="onRowClick" @deleteClick="deleteClick">
+        <template v-slot:detail="scope">
+          <div class="inline-16">
+            <el-button type="text" size="small" @click="$router.push({path:'/roleDetails',query:{id:scope.data.roleid}})">详 情</el-button>
+          </div>
         </template>
-        <template v-slot:cancelAuth="scope">
-          <cancelAuth v-if="tool.checkAuth($route.name,'auth')" :data="scope.data" @onSuccess="refreshRoleMain"></cancelAuth>
-        </template>
-      </role-details>
-    </list>
+        <template v-slot:edit="scope">
+          <el-button type="text" size="small" @click="$router.push({path:'/roleEdit',query:{id:scope.data.roleid}})">编 辑</el-button>
+          <!-- <edit v-if="tool.checkAuth($route.name,'update')" style="margin-right:10px" :data="scope.data" @onSuccess="onSuccess"></edit> -->
+        </template>       
+      </list>
+    </div>
   </div>
 </template>
 
 <script>
 import list from './modules/list.vue'
-import roleDetails from './modules/role_details.vue'
 import add from './modules/add_role.vue'
-import edit from './modules/edit_role.vue'
-import roleDel from './modules/delete_role.vue'
-import authList from './modules/auth_list.vue'
-import cancelAuth from './modules/cancel_auth.vue'
-
 export default {
   components:{
     list,
-    roleDetails,
-    add,
-    edit,
-    roleDel,
-    authList,
-    cancelAuth
+    add
   },
   data () {
     return {

+ 1 - 38
src/HManagement/roleManage/modules/add_role.vue

@@ -1,20 +1,6 @@
 <template>
   <div>
-    <el-button size="mini" type="primary" icon="el-icon-plus" @click="dialogFormVisible = true">新增角色</el-button>
-    <el-dialog title="新增角色" width="400px" :visible.sync="dialogFormVisible">
-      <el-form :model="form" size="small" label-position="left">
-        <el-form-item label="角色名称" label-width="80px">
-          <el-input v-model="form.rolename" autocomplete="off" placeholder="输入角色名称"></el-input>
-        </el-form-item>
-        <el-form-item label="角色描述" label-width="80px">
-          <el-input v-model="form.remarks" autocomplete="off" placeholder="输入角色描述"></el-input>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button @click="dialogFormVisible = false" size="small">取 消</el-button>
-        <el-button type="primary" @click="onSubmit" size="small">确 定</el-button>
-      </div>
-    </el-dialog>
+    <el-button size="mini" type="primary" icon="el-icon-plus" @click="$router.push({path:'/roleEdit',query:{id:0}})">新 建</el-button>
   </div>
 </template>
 
@@ -31,29 +17,6 @@ export default {
     }
   },
   methods:{
-    onSubmit () {
-      this.$api.requested({
-         "classname": "webmanage.role.role",
-        "method": "insertormodify_role",
-        "content": this.form
-      }).then(res=>{
-        if (res.code === 1) {
-          this.$notify({
-            title: '成功',
-            message: '角色添加成功',
-            type: 'success'
-          });
-          this.$emit('onSuccess')
-          this.dialogFormVisible = false
-        } else {
-          this.$notify({
-            title: '失败',
-            message: res.data,
-            type: 'error'
-          });
-        }
-      })
-    }
   }
 }
 

+ 82 - 20
src/HManagement/roleManage/modules/edit_role.vue

@@ -1,47 +1,100 @@
 <template>
-  <div style="display:inline">
-    <el-button size="mini" type="primary" icon="el-icon-edit" @click="onShow">编 辑</el-button>
-    <el-dialog title="新增角色" width="400px" :visible.sync="dialogFormVisible">
-      <el-form :model="form" size="small" label-position="left">
-        <el-form-item label="角色名称" label-width="80px">
-          <el-input v-model="form.rolename" autocomplete="off" placeholder="输入角色名称"></el-input>
+  <div>
+    <div class="container normal-panel mb-16">
+      <el-button type="warning" size="small" icon="el-icon-s-claim" style="background:#FA8C16" @click="onSubmit">保 存</el-button>
+    </div>
+    <div class="container normal-panel mb-16">
+      <p class="normal-title mb-16">角色信息</p>
+      <el-form :inline="true" :model="form" size="small" label-width="100px" label-position="left" class="demo-form-inline">
+        <el-form-item label="角色名称">
+          <el-input v-model="form.rolename" placeholder="输入角色名称"></el-input>
         </el-form-item>
-        <el-form-item label="角色描述" label-width="80px">
-          <el-input v-model="form.remarks" autocomplete="off" placeholder="输入角色描述"></el-input>
+        <el-form-item label="角色描述">
+          <el-input v-model="form.remarks" placeholder="输入角色描述"></el-input>
+        </el-form-item>
+        <el-form-item label="角色类型">
+          <el-select v-model="form.usertype" placeholder="角色类型">
+            <el-option v-for="item in options" :key="item.index" :label="item.remarks" :value="Number(item.value)"></el-option>
+          </el-select>
         </el-form-item>
       </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button @click="dialogFormVisible = false" size="small">取 消</el-button>
-        <el-button type="primary" @click="onSubmit" size="small">确 定</el-button>
-      </div>
-    </el-dialog>
+    </div>
+    <div class="container normal-panel mb-16">
+      <p class="normal-title mb-16">角色授权</p>
+      <el-row :gutter="20">
+        <el-col :span="12">
+          <auth :data="{roleid:roleid}"></auth>
+          <tableLayout :layout="tablecols" :data="roleMainInfo.apps" :opwidth="200" :custom="false">
+          </tableLayout>
+        </el-col>
+      </el-row>
+    </div>
   </div>
 </template>
 
 <script>
+import auth from './auth_list.vue'
 export default {
   props:['data'],
+  components:{
+    auth
+  },
   data () {
     return{
-      dialogFormVisible:false,
       form:{
         "roleid":0,
         "rolename":"",
         "remarks":""
-      }
+      },
+      roleMainInfo:{},
+      options:[],
+      tablecols:[],
+      roleid:0,
     }
   },
   methods:{
+    async roleMain () {
+      const res = await this.$api.requested({
+        "classname": "webmanage.role.role",
+        "method": "query_roleMain",
+        "content": {
+            "roleid":this.roleid
+        }
+      })
+      this.form = {
+        "roleid":res.data[0].roleid,
+        "rolename":res.data[0].rolename,
+        "remarks":res.data[0].remarks,
+        "usertype":res.data[0].usertype
+      }
+      this.roleMainInfo = res.data[0]
+    },
+    async usertype () {
+      let param = {
+        "classname": "sysmanage.develop.optiontype.optiontype",
+        "method": "optiontypeselect",
+        "content": {
+            "pageNumber": 1,
+            "pageSize": 20,
+            "typename": "usertype",
+            "parameter": {
+            }
+        }
+      }
+      const res = await this.$api.requested(param)
+      this.options = res.data
+    },
     onSubmit () {
       this.$api.requested({
          "classname": "webmanage.role.role",
         "method": "insertormodify_role",
         "content": this.form
       }).then(res=>{
+        this.$router.replace({path:'/roleEdit',query:{id:res.data[0].roleid}})
         if (res.code === 1) {
           this.$notify({
             title: '成功',
-            message: '角色添加成功',
+            message: '保存成功',
             type: 'success'
           });
           this.$emit('onSuccess')
@@ -54,14 +107,23 @@ export default {
           });
         }
       })
-    },
-    onShow () {
-      this.form = Object.assign({},this.form,this.data)
-      this.dialogFormVisible = true
     }
+  },
+  mounted () {
+    // 获取应用表结构
+    this.tablecols = this.tool.tabelCol(this.$route.name).detailsAppsTable.tablecols
+
+    this.roleid = this.$route.query.id
+    this.roleid !== '0'?this.roleMain():''
+    this.usertype()
   }
 }
 
 </script>
 <style>
+</style>
+<style scoped>
+.mb-16{
+  margin-bottom:16px
+}
 </style>

+ 72 - 56
src/HManagement/roleManage/modules/list.vue

@@ -1,53 +1,42 @@
 <template>
   <div>
-    <el-row type="flex" :gutter="40">
-      <el-col style="border-right:1px solid #ccc;height:calc(100vh - 199px);" :span="10">
-        <slot name="add"></slot>
-        <el-table
-          :data="list"
-          style="width: 100%"
-          size="small"
-           highlight-current-row
-          border
-          :header-cell-style="{background:'#f1f2f3',color:'#333'}"
-          @row-click="rowClick">
-          <el-table-column
-            prop="remarks"
-            label="角色描述">
-          </el-table-column>
-          <el-table-column
-            prop="rolename"
-            label="角色名称">
-          </el-table-column>
-          <!-- <el-table-column
-            label="操作"
-            width="150">
-            <template slot-scope="scope">
-              <slot name="auth" :data="scope.row"></slot>
-              <el-divider direction="vertical"></el-divider>
-              <slot name="edit" :data="scope.row"></slot>
-              <el-divider direction="vertical"></el-divider>
-              <slot name="del" :data="scope.row"></slot>
-            </template>
-          </el-table-column> -->
-        </el-table>
-        <div style="margin:20px 0">
-          <el-pagination
-            background
-            small
-            @size-change="handleSizeChange"
-            @current-change="handleCurrentChange"
-            :current-page="currentPage"
-            :page-size="param.content.pageSize"
-            layout="total, prev, pager, next, jumper"
-            :total="total">
-          </el-pagination>
-        </div>
-      </el-col>
-      <el-col :span="14">
-        <slot name="details"></slot>
-      </el-col>
-    </el-row>
+    <!-- 表格搜索 -->
+    <div class="flex-align-center search-panel" style="margin-bottom:16px">
+      <div class="flex-align-center">
+        <p>搜索:</p>
+        <el-input size="small" placeholder="请输入查询内容" @blur="listData('search')" @clear="listData('search')" v-model="param.content.where.condition" prefix-icon="el-icon-search" clearable></el-input>
+      </div>
+      <div class="flex-align-center" style="margin-left:30px">
+        <p style="width:80px">角色类型:</p>
+        <el-select style="width:120px;" size="small" v-model="param.content.where.usertype" clearable placeholder="请选择" @change="listData('search')">
+          <el-option v-for="item in options" :label="item.remarks" :value="item.value" :key="item.index"></el-option>
+        </el-select>
+      </div>
+    </div>
+    <tableLayout :layout="tablecols" :data="list" :opwidth="200" :custom="true" :height="tableHieght">
+      <template v-slot:customcol="scope">
+        <p v-if="scope.column.columnname === 'status'">
+          <span :style="scope.column.data.status === 'ACTIVE'?'color:#52C41A':'color:#FF3B30'">{{scope.column.data.status === 'ACTIVE'?'启用':scope.column.data.status === 'INACTIVE'?'停用':'其他'}}</span>
+        </p>
+        <p v-else>{{scope.column.data[scope.column.columnname]}}</p>
+      </template>
+      <template v-slot:opreation="scope">
+        <slot name="detail" :data="scope.data"></slot>
+        <slot name="edit" :data="scope.data"></slot>
+      </template>
+    </tableLayout>
+    <div style="margin-top:16px;text-align:right">
+      <el-pagination
+        background
+        small
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+        :current-page="currentPage"
+        :page-size="param.content.pageSize"
+        layout="total, prev, pager, next, jumper"
+        :total="total">
+      </el-pagination>
+    </div>
   </div>
 </template>
 
@@ -62,23 +51,40 @@ export default {
             "pageNumber": 1,
             "pageSize": 20,
             "where":{
-                "condition":"",
-                "siteid":""
+              "condition":"",
+              "usertype":"",
             }
         }
       },
+      options:[],
+      tablecols:[],
       list:[],
       total:0,
       currentPage:0,
     }
   },
   methods:{
-    listData (callback) {
+    async usertype () {
+      let param = {
+        "classname": "sysmanage.develop.optiontype.optiontype",
+        "method": "optiontypeselect",
+        "content": {
+            "pageNumber": 1,
+            "pageSize": 20,
+            "typename": "usertype",
+            "parameter": {
+            }
+        }
+      }
+      const res = await this.$api.requested(param)
+      this.options = res.data
+    },
+    listData (issearch) {
+      issearch === 'search'?this.param.content.pageNumber = 1:''
       this.$api.requested(this.param).then(res=>{
         this.list = res.data
         this.total = res.total
         this.currentPage = res.pageNumber
-        callback?callback():''
       })
     },
     handleSizeChange(val) {
@@ -99,16 +105,26 @@ export default {
     }
   },
   mounted () {
-   this.listData(()=>this.rowClick(this.list[0]))
+    this.listData()
+    this.usertype()
+    // 获取角色表结构
+    this.tablecols = this.tool.tabelCol(this.$route.name).roleTable.tablecols
   }
 }
 
 </script>
 <style>
+.el-input-group__append, .el-input-group__prepend{
+  background-color: #4F7BFD ;
+  color: #fff;
+  border: 1px solid #4F7BFD;
+  cursor: pointer;
+}
 </style>
 <style scoped>
-.container{
-  padding: 20px;
-  /* background: #f1f2f3; */
+.search-panel p{
+  flex: 1 0 auto;
+  width:40px;
+  font-size:14px
 }
 </style>

+ 49 - 4
src/HManagement/siteManage/securityConfig/index.vue

@@ -1,5 +1,13 @@
 <template>
   <div>
+    <div class="container normal-panel normal-margin flex-align-center flex-between">
+      <edit :basicInfo="siteinfo" @onSuccess="infoData"></edit>
+      <i class="el-icon-refresh" @click="infoData"></i>
+    </div>
+    <basicInfo></basicInfo>
+    <div class="container normal-panel">
+      <el-descriptions title="安全配置"></el-descriptions>
+    </div>
     <div class="panel">
       <div class="flex-align-center flex-between">
         <div class="flex-align-stretch">
@@ -9,11 +17,11 @@
             <p class="explain-tips">当前设置:<span class="color-yellow">密码6位数,数字0-9,特殊符号~,!,@,#,$,%,^;</span></p>
           </div>
         </div>
-        <set-password></set-password>
+        <set-password v-if="tool.checkAuth($route.name,'psdValidate')"></set-password>
       </div>
     </div>
     <div class="panel">
-      <div>
+      <div class="flex-align-center flex-between">
         <div class="flex-align-stretch">
           <img width="72" height="72" src="../../../assets/icons/login_type_2.png" alt="">
           <div class="text-panel">
@@ -21,10 +29,11 @@
             <p class="explain-tips">当前设置:已上传水印图片</p>
           </div>
         </div>
+        <set-watermark :basicInfo="basicInfo" v-if="tool.checkAuth($route.name,'setWatermark')"></set-watermark>
       </div>
     </div>
     <div class="panel">
-      <div>
+      <div class="flex-align-center flex-between">
         <div class="flex-align-stretch">
           <img width="72" height="72" src="../../../assets/icons/login_type_3.png" alt="">
           <div class="text-panel">
@@ -32,16 +41,52 @@
             <p class="explain-tips">当前设置:账号登录,微信登录</p>
           </div>
         </div>
+        <login-select v-if="tool.checkAuth($route.name,'loginType')"></login-select>
       </div>
     </div>
   </div>
 </template>
 
 <script>
+import {mapGetters} from 'vuex'
+
+import basicInfo from './modules/basicinfo.vue'
+import edit from './modules/edit.vue'
+
 import setPassword from './modules/password.vue'
+import setWatermark from './modules/watermark.vue'
+import loginSelect from './modules/loginSelect.vue'
+
 export default {
   components:{
-    setPassword
+    setPassword,
+    setWatermark,
+    loginSelect,
+    basicInfo,
+    edit
+  },
+  data () {
+    return {
+      basicInfo:{}
+    }
+  },
+  computed:{
+    ...mapGetters({
+      siteinfo:'siteinfo'
+    })
+  },
+  methods:{
+    // 查询站点信息
+    async infoData () {
+      this.$store.dispatch('querySiteInfo',{
+        "classname": "webmanage.site.site",
+        "method": "querySite",
+        "content": {}
+      })
+    }
+  },
+  mounted () {
+    this.infoData()
   }
 }
 

+ 51 - 0
src/HManagement/siteManage/securityConfig/modules/basicinfo.vue

@@ -0,0 +1,51 @@
+<template>
+  <div class="container normal-panel normal-margin">
+    <el-descriptions title="企业信息">
+        <el-descriptions-item label="企业名称">{{siteinfo.enterprisename?siteinfo.enterprisename:'--'}}</el-descriptions-item>
+        <el-descriptions-item label="企业简称">{{siteinfo.sitename}}</el-descriptions-item>
+        <!-- <el-descriptions-item label="企业互联ID">苏州市</el-descriptions-item> -->
+    </el-descriptions>
+    <el-descriptions direction="vertical">
+      <el-descriptions-item label="企业操作页LOGO">
+        <div class="image-panel">
+          <img v-show="img.usetype === 'actionlogo'" v-for="img in siteinfo.attinfos" :key="img.index" style="width:100%" :src="img.url" alt="">
+        </div>
+      </el-descriptions-item>
+      <!-- <el-descriptions-item label="企业登录页LOGO">
+        <br><div>
+          <el-image src="">
+            <div slot="error" class="image-slot">
+              <i class="el-icon-picture-outline"></i>
+            </div>
+          </el-image>
+        </div>
+      </el-descriptions-item> -->
+      <!-- <el-descriptions-item label="登录背景">
+      </el-descriptions-item> -->
+    </el-descriptions>
+  </div>
+</template>
+
+<script>
+import {mapGetters} from 'vuex'
+
+export default {
+  data () {
+    return {
+    }
+  },
+  computed:{
+    ...mapGetters({
+      siteinfo:'siteinfo'
+    })
+  },
+  methods:{
+
+  },
+  mounted () {
+  }
+}
+
+</script>
+<style>
+</style>

+ 127 - 0
src/HManagement/siteManage/securityConfig/modules/edit.vue

@@ -0,0 +1,127 @@
+<template>
+  <div>
+    <el-button icon="el-icon-edit" size="small" @click="onShow">编 辑</el-button>
+    <el-dialog title="编辑" top="30px" :visible.sync="dialogEditVisible">
+      <el-row :gutter="16">
+        <el-form  :model="form" :rules="rules" ref="form" size="small" inline class="demo-ruleForm">
+          <el-col :span="12">
+            <el-form-item label="企业名称" prop="enterprisename">
+              <el-input class="normal_input-width" v-model="form.enterprisename" placeholder="请输入企业名称"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="企业简称" prop="sitename">
+              <el-input class="normal_input-width" v-model="form.sitename" placeholder="请输入企业简称"></el-input>
+            </el-form-item>
+          </el-col>
+        </el-form>
+      </el-row>
+      <el-row style="margin:32px 0 0 0" :gutter="16">
+        <el-col :span="12">
+          <p>企业操作页LOGO:</p>
+          <uploadFile v-if="show" style="margin-top:10px" :folderid="folderid" accept=".JPG,.PNG" btntype="image" :bindData="{ownertable:'sys_site',ownerid:siteinfo.siteuid,usetype:'actionlogo'}" @onSuccess="uploadSuccess"></uploadFile>
+          <div v-else class="image-panel">
+            <i class="el-icon-error close-btn" @click="deleteFileLink"></i>
+            <img v-show="img.usetype === 'actionlogo'" v-for="img in siteinfo.attinfos" :key="img.index" style="width:100%" :src="img.url" alt="">
+          </div>
+          <small style="display:block;margin-top:20px" class="info">注:建议上传图片大小1024x1024,大小不超过2M,格式为JPG/PNG</small>
+        </el-col>
+      </el-row>
+      <div class="dialog-footer">
+        <el-button size="small" @click="dialogEditVisible = false" class="normal-btn-width">取 消</el-button>
+        <el-button size="small" type="warning" @click="submit" class="normal-btn-width btn-warning">确 定</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {mapGetters} from 'vuex'
+
+import uploadFile from '../../../../components/upload/hw_obs_upload.vue'
+export default {
+  props:['basicInfo'],
+  components:{
+    uploadFile
+  },
+  computed:{
+    ...mapGetters({
+      siteinfo:'siteinfo'
+    }),
+    show () {
+      if (this.siteinfo.attinfos.some(item=>item.usetype === 'actionlogo')) {
+        return false
+      } else {
+        return true
+      }
+    }
+  },
+  data () {
+    return {
+      dialogEditVisible:false,
+      form:{},
+      rules:{
+        enterprisename:[
+          { required: true, message: '请输入企业名称', trigger: 'blur' },
+        ],
+        sitename:[
+          { required: true, message: '请输入企业简称', trigger: 'blur' }
+        ]
+      },
+      folderid:JSON.parse(sessionStorage.getItem('folderid')).appfolderid
+    }
+  },
+  methods:{
+    onShow () {
+      this.dialogEditVisible = true
+      this.form = Object.assign({},this.form,this.siteinfo)
+    },
+    submit () {
+      this.$refs['form'].validate(async (valid) => {
+        if (!valid) return false;
+        const res = await this.$api.requested({
+          "classname": "webmanage.site.site",
+          "method": "updateSite",
+          "content": this.form
+        })
+        if (res.code === 1) {
+          this.$notify({
+            title: '成功',
+            message: '修改成功',
+            type:'success'
+          })
+          this.dialogEditVisible = false
+          this.$emit('onSuccess')
+        } else {
+          this.$notify({
+            title:'失败',
+            message: res.data,
+            type:'error'
+          })
+        }
+      });
+    },
+    async deleteFileLink () {
+      const res = await this.$api.requested({
+        "classname": "system.attachment.Attachment",
+        "method": "deleteFileLink",
+        "content": {
+          "linksids":[this.form.attinfos[0].linksid]
+        }
+      })
+      res.code === 1?this.$emit('onSuccess'):''
+    },
+    uploadSuccess () {
+      this.$emit('onSuccess')
+    }
+  }
+}
+
+</script>
+<style scoped>
+.dialog-footer{
+  margin-top: 50px;
+  text-align: center;
+}
+
+</style>

+ 88 - 2
src/HManagement/siteManage/securityConfig/modules/loginSelect.vue

@@ -1,12 +1,98 @@
 <template>
-  <div></div>
+  <div>
+    <el-button size="small" style="width:120px" type="primary" @click="querySite_Parameter">设 置</el-button>
+    <el-dialog title="设置" :visible.sync="dialogEditVisible" width="600px">
+      <el-row :gutter="16">
+        <el-col>
+          <p style="margin-bottom:20px">登录方式</p>
+          <el-checkbox-group v-model="checkList" @change="checkboxChange">
+            <el-checkbox label="loginmode_account">账号登录</el-checkbox>
+            <el-checkbox label="loginmode_phonenumber">手机动态短信登录</el-checkbox>
+            <el-checkbox label="loginmode_wechat">微信登录</el-checkbox>
+          </el-checkbox-group>
+        </el-col>
+      </el-row>
+      <div class="dialog-footer">
+        <el-button size="small" @click="dialogEditVisible = false" class="normal-btn-width">取 消</el-button>
+        <el-button size="small" type="warning" @click="updateSite_Parameter" class="normal-btn-width btn-warning">确 定</el-button>
+      </div>
+    </el-dialog>
+  </div>
 </template>
 
 <script>
+import uploadFile from '../../../../components/upload/hw_obs_upload.vue'
 export default {
+  props:['basicInfo'],
+  components:{
+    uploadFile
+  },
+  data () {
+    return {
+      dialogEditVisible:false,
+      form:{},
+      checkList:[]
+    }
+  },
+  methods:{
+    async querySite_Parameter () {
+      this.dialogEditVisible = true
+      this.disabled = true
+      
+      const res = await this.$api.requested({
+        "classname": "webmanage.site.site",
+        "method": "querySite_Parameter",
+        "content": {
+        }
+      })
+      let obj = {
+        password_needcapital:res.data.password_needcapital,
+        password_needlowercase:res.data.password_needlowercase,
+        password_neednum:res.data.password_neednum,
+        password_needspecialchar:res.data.password_needspecialchar,
+        password_length:res.data.password_length,
+        loginmode_account:res.data.loginmode_account,
+        loginmode_phonenumber:res.data.loginmode_phonenumber,
+        loginmode_wechat:res.data.loginmode_wechat
+      }
+      this.form = Object.assign({},this.form,obj)
 
+      Object.keys(res.data).map((key,item)=>{
+        res.data[key] === 1?this.checkList.push(key):''
+      })
+    },
+    checkboxChange () {
+      Object.keys(this.form).map((key,item)=>{
+         if (key !== 'password_length')
+         return this.form[key] = this.checkList.some(item=>item === key)?1:0
+      })
+    },
+    async updateSite_Parameter () {
+      const res = await this.$api.requested({
+        "classname": "webmanage.site.site",
+        "method": "updateSite_Parameter",
+        "content": this.form
+      })
+      if (res.code === 1) {
+        this.$message({
+          message:'修改成功',
+          type:'success'
+        })
+        this.dialogEditVisible = false
+      } else {
+        this.$message({
+          message:res.data,
+          type:'error'
+        })
+      }
+    },
+  }
 }
 
 </script>
-<style>
+<style scoped>
+.dialog-footer{
+  margin-top: 50px;
+  text-align: center;
+}
 </style>

+ 61 - 33
src/HManagement/siteManage/securityConfig/modules/password.vue

@@ -1,23 +1,25 @@
 <template>
   <div>
-    <el-button size="small" type="primary" style="width:120px" @click="dialogFormVisible = true ">设 置</el-button>
+    <el-button size="small" type="primary" style="width:120px" @click="querySite_Parameter">设 置</el-button>
     <el-dialog title="设 置" :visible.sync="dialogFormVisible" width="860px">
-      <el-form :model="form" label-position="top" style="padding:0 30px">
+      <el-form :model="form" label-position="left" style="padding:0 30px">
+        <el-form-item label="默认密码">
+          <div class="flex-align-center">
+            <el-input size="small" style="width:300px" :disabled="disabled" type="password" v-model="password_default"  placeholder="请输入默认密码"></el-input>
+            <el-button type="text" size="small" style="margin-left:10px" @click="setPassword">重新设置</el-button>
+          </div>
+        </el-form-item>
         <el-form-item label="密码位数">
-          <div><el-radio v-model="radio" :label="0">关 闭</el-radio></div>
           <div class="flex-align-center">
-            <el-radio v-model="radio" :label="1">开启</el-radio>
-            <el-input size="small" style="width:300px" v-model="form.password_length" :disabled="radio === 0" placeholder="请输入密码位数"></el-input>
+            <el-input size="small" style="width:300px" v-model="form.password_length" placeholder="请输入密码位数"></el-input>
           </div>
         </el-form-item>
         <el-form-item label="包含字符类型">
-          <div><el-radio v-model="radio2" :label="0">关 闭</el-radio></div>
           <div class="flex-align-center">
-            <el-radio v-model="radio2" :label="1">开启</el-radio>
             <div>
               <el-checkbox-group :disabled="radio2 === 0" v-model="checkList" @change="checkboxChange">
-                <el-checkbox label="password_needcapital">是否需要大写英文字母</el-checkbox>
-                <el-checkbox label="password_needlowercase">是否需要小写英文字母</el-checkbox>
+                <el-checkbox label="password_needcapital">大写英文字母</el-checkbox>
+                <el-checkbox label="password_needlowercase">小写英文字母</el-checkbox>
                 <el-checkbox label="password_neednum">数字0-9</el-checkbox>
                 <el-checkbox label="password_needspecialchar">特殊符号~,!,@,#,$,%,^;</el-checkbox>
               </el-checkbox-group>
@@ -34,69 +36,95 @@
 </template>
 
 <script>
+import md5 from 'js-md5'
+
 export default {
   data () {
     return {
       dialogFormVisible:false,
-      radio:0,
-      radio2:0,
+      disabled:true,
+      radio:1,
+      radio2:1,
       form:{
         "loginmode_phonenumber": 1,
         "loginmode_wechat": 0,
         "loginmode_account":1
       },
-      checkList:[]
+      checkList:[],
+      password_default:''
     }
   },
   mounted () {
-    this.querySite_Parameter()
+    // this.querySite_Parameter()
   },
   methods:{
     async querySite_Parameter () {
+      this.dialogFormVisible = true
+      this.disabled = true
+      
       const res = await this.$api.requested({
         "classname": "webmanage.site.site",
         "method": "querySite_Parameter",
         "content": {
         }
       })
-      this.form = Object.assign({},this.form,res.data)
-      this.setFormData(res)
-    },
-    setFormData (res) {
-      this.form.password_length > 0 ? this.radio = 1 : this.radio = 0
-      res.data.password_needcapital === 1?this.checkList.push('password_needcapital'):''
-      res.data.password_needlowercase === 1?this.checkList.push('password_needlowercase'):''
-      res.data.password_neednum === 1?this.checkList.push('password_neednum'):''
-      res.data.password_needspecialchar === 1?this.checkList.push('password_needspecialchar'):''
-      this.checkList.length > 0 ? this.radio2 = 1:this.radio2 = 0
+      let obj = {
+        password_needcapital:res.data.password_needcapital,
+        password_needlowercase:res.data.password_needlowercase,
+        password_neednum:res.data.password_neednum,
+        password_needspecialchar:res.data.password_needspecialchar,
+        password_length:res.data.password_length
+      }
+      this.password_default = res.data.password_default
+      this.form = Object.assign({},this.form,obj)
+
+      Object.keys(res.data).map((key,item)=>{
+        res.data[key] === 1?this.checkList.push(key):''
+      })
     },
     checkboxChange () {
-      this.form.password_needcapital = this.checkList.some(item=>item === 'password_needcapital')?1:0
-      this.form.password_needlowercase = this.checkList.some(item=>item === 'password_needlowercase')?1:0
-      this.form.password_neednum = this.checkList.some(item=>item === 'password_neednum')?1:0
-      this.form.password_needspecialchar = this.checkList.some(item=>item === 'password_needspecialchar')?1:0
+      Object.keys(this.form).map((key,item)=>{
+        if (key !== 'password_length')
+         return this.form[key] = this.checkList.some(item=>item === key)?1:0
+      })
     },
     async updateSite_Parameter () {
-      if (this.radio === 1 &&  this.form.password_length <= 0) return this.$message({message:'密码长度必须大于0',type:'error'})
-      this.form.password_length = this.radio === 0?0:this.form.password_length
+      if (this.form.password_length <= 0) return this.$message({message:'密码长度必须大于0',type:'error'})
       const res = await this.$api.requested({
         "classname": "webmanage.site.site",
         "method": "updateSite_Parameter",
         "content": this.form
       })
       if (res.code === 1) {
-        this.$emit('onSuccess')
-        this.$message({
+        this.disabled?this.$message({
           message:'修改成功',
           type:'success'
-        })
-        this.dialogFormVisible = false
+        }):this.setDefaultPassword()
+        this.disabled?this.dialogFormVisible = false:''
       } else {
         this.$message({
           message:res.data,
           type:'error'
         })
       }
+    },
+    async setDefaultPassword () {
+      if (this.password_default.length < this.form.password_length) return this.$message({message:'密码长度有误请重新设置',type:'error'})
+      const res = await this.$api.requested({
+        "classname": "webmanage.site.site",
+        "method": "updateSite_defaultpassword",
+        "content": {
+          "password_default":md5(this.password_default)
+        }
+      })
+      res.code === 1?this.dialogFormVisible = false:this.$message({
+          message:res.data,
+          type:'error'
+        })
+    },
+    setPassword () {
+      this.disabled = false
+      this.password_default = ''
     }
   }
 }

+ 72 - 0
src/HManagement/siteManage/securityConfig/modules/watermark.vue

@@ -0,0 +1,72 @@
+<template>
+  <div>
+    <el-button size="small" style="width:120px" type="primary" @click="queryFileLink">设 置</el-button>
+    <el-dialog title="设置" :visible.sync="dialogEditVisible">
+      <el-row :gutter="16">
+        <el-col :span="12">
+          <p>企业水印图片:</p>
+          <uploadFile v-if="!image.url" style="margin-top:10px" :folderid="folderid" accept=".JPG,.PNG" btntype="image" :bindData="{ownertable:'sys_site',ownerid:siteinfo.siteuid,usetype:'watermark'}" @onSuccess="queryFileLink"></uploadFile>
+          <div v-else>
+            <!-- <img  style="width:100%" :src="image.url" alt=""> -->
+            <viewImage :image="image" :deletebtn="true" @onSuccess="queryFileLink"></viewImage>
+          </div>
+          <small style="display:block;margin-top:20px" class="info">注:建议上传图片大小1024x1024,大小不超过2M,格式为JPG/PNG</small>
+        </el-col>
+      </el-row>
+      <div class="dialog-footer">
+        <el-button size="small" @click="dialogEditVisible = false" class="normal-btn-width">取 消</el-button>
+        <el-button size="small" type="warning" @click="dialogEditVisible = false" class="normal-btn-width btn-warning">确 定</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {mapGetters} from 'vuex'
+
+import uploadFile from '../../../../components/upload/hw_obs_upload.vue'
+import viewImage from '../../../../components/previewImage/index.vue'
+
+export default {
+  props:['basicInfo'],
+  components:{
+    uploadFile,
+    viewImage
+  },
+  computed:{
+    ...mapGetters({
+      siteinfo:'siteinfo'
+    })
+  },
+  data () {
+    return {
+      dialogEditVisible:false,
+      image:{url:''},
+      folderid:JSON.parse(sessionStorage.getItem('folderid')).appfolderid
+    }
+  },
+  methods:{
+    // 获取附件信息
+    async queryFileLink () {
+      this.dialogEditVisible = true
+      const res = await this.$api.requested({
+        "classname": "system.attachment.Attachment",
+        "method": "queryFileLink",
+        "content": {
+          "ownertable": 'sys_site',
+          "ownerid": this.siteinfo.siteuid,
+          "usetype":'watermark'//传空返回有所
+        }
+      })
+      res.data[0]?this.image = res.data[0]:this.image = {url:''}
+    },
+  }
+}
+
+</script>
+<style scoped>
+.dialog-footer{
+  margin-top: 50px;
+  text-align: center;
+}
+</style>

+ 21 - 14
src/components/dynamic-table/index.vue

@@ -1,14 +1,14 @@
 <template>
   <div>
-    <el-table :header-cell-style="{background:'#f1f2f3',color:'#333'}" size="mini" border>
-      <el-table-column v-for="col in list" :key="col.gridcolid" :property="col.column" :label="col.title" :width="col.width === 0?'':col.width"></el-table-column>
-      <el-table-column label="操作" width="150">
+    <el-table :data="data" :header-cell-style="{background:'#EEEEEE',color:'#333'}" size="mini" :height="height"  border>
+      <el-table-column v-for="col in layout" :key="col.tablecolid" :prop="col.columnname" :label="col.title" :width="col.width">
         <template slot-scope="scope">
-          <el-button size="mini" type="text" @click="onRead(scope)">查 看</el-button>
-          <el-divider direction="vertical"></el-divider>
-          <el-button size="mini" type="text" @click="onEdit(scope)">编 辑</el-button>
-          <el-divider direction="vertical"></el-divider>
-          <el-button size="mini" type="text"  @click="onDelete(scope)">删 除</el-button>
+          <!-- 自定义表格显示内容 -->
+          <slot v-if="custom" name="customcol" :column="{data:scope.row,columnname:col.columnname}"></slot>
+          <!-- 否则就是默认 -->
+          <span v-else>{{scope.row[col.columnname]}}</span>
+          <!-- 操作结构内容 -->
+          <slot v-if="col.columnname === 'operation'" name="opreation" :data="scope.row"></slot>
         </template>
       </el-table-column>
     </el-table>
@@ -16,20 +16,27 @@
 </template>
 
 <script>
+
 export default {
-  props:['gridid'],
+  /*
+    layout:表结构数据;
+    data:表渲染数据;
+    custom:是否启用自定义结构;
+    opwidth:操作列宽度
+  */
+  props:['layout','data','custom','height',],
   data () {
     return {
-      list:[]
+      list:[],
     }
   },
   methods:{
     listData () {
       let param = {
-       "classname": "sysmanage.develop.appregistry.appregistry_grid",
-        "method": "query_appgridcollist",
+       "classname": "sysmanage.develop.appregistry.appregistry_table",
+        "method": "query_apptablecollist",
         "content": {
-          "gridid": this.gridid
+          "tableid": 1
         }
       }
       this.$api.requested(param).then(res=>{
@@ -47,7 +54,7 @@ export default {
     }
   },
   mounted () {
-    this.listData()
+    // this.listData()
   }
 }
 

+ 23 - 6
src/components/layout/index.vue

@@ -2,7 +2,9 @@
   <div class="flex-align-center">
     <div class="nav-list">
       <div class="nav-top-item">
-        <div class="logo-avatar"></div>
+        <div class="logo-avatar">
+          <img v-show="img.usetype === 'actionlogo'" v-for="img in siteinfo.attinfos" :key="img.index" style="width:100%" :src="img.url" alt="">
+        </div>
         <div class="item active" @click="$router.push('/home')">
            <img width="30" src="../../assets/nav_icon/work_station.svg" alt="">
            <p>工作台</p>
@@ -19,7 +21,7 @@
       </div>
     </div>
     <el-container>
-      <el-header><myheader></myheader></el-header>
+      <el-header><myheader :siteinfo="siteinfo"></myheader></el-header>
       <div class="modules-panel flex-align-center flex-between">
         <p>{{routerName}}</p>
         <el-button size="mini" @click="$router.go(-1)">返 回</el-button>
@@ -33,10 +35,9 @@
             element-loading-background="rgba(255, 255, 255, 0.8)">
             <router-view></router-view>
           </el-main>
-          <el-footer class="flex-footer">
+          <!-- <el-footer class="flex-footer">
             <p>技术支持:XXXXXXX</p><br>
-            <!-- <small class="lastP">浙ICP备&nbsp;18043486号-1</small> -->
-          </el-footer>
+          </el-footer> -->
         </el-container>
       </el-container>
     </el-container>
@@ -47,20 +48,35 @@
 import store from "../../store/index"
 import myheader from './modules/header.vue'
 import myaside from './modules/aside.vue'
+import {mapGetters} from 'vuex'
 export default {
   components:{
     myheader,
     myaside
   },
+  computed:{
+    ...mapGetters({
+      siteinfo:'siteinfo'
+    })
+  },
   data () {
     return {
       store,
       routerName:''
     }
   },
+  methods:{
+    siteInfos () {
+      this.$store.dispatch('querySiteInfo',{
+        "classname": "webmanage.site.site",
+        "method": "querySite",
+        "content": {}
+      })
+    }
+  },
   created () {
+    this.siteInfos()
     this.routerName = this.$route.meta.title
-    console.log(this.$route.meta)
     this.ast_nav = this.$route.meta.ast_nav
   },
   watch:{
@@ -93,6 +109,7 @@ export default {
   margin: 0 auto 30px auto;
   border-radius: 8px;
   background: #f1f2f3;
+  overflow: hidden;
 }
 .item{
   width: 40px;

+ 2 - 1
src/components/layout/modules/header.vue

@@ -5,7 +5,7 @@
     <el-dropdown>
       <span class="el-dropdown-link">
         <div class="flex">
-          <img height="30" src="../../../assets/avatar.png" alt="">&emsp;{{accountInfo.name}}<i class="el-icon-arrow-down el-icon--right"></i>
+          <img height="30" src="../../../assets/avatar.png" alt="">&emsp;{{siteinfo.enterprisename}}<i class="el-icon-arrow-down el-icon--right"></i>
         </div>
       </span>
       <el-dropdown-menu slot="dropdown">
@@ -20,6 +20,7 @@
 
 <script>
 export default {
+  props:['siteinfo'],
   data () {
     return {
       activeIndex:'',

+ 42 - 0
src/components/previewImage/index.vue

@@ -0,0 +1,42 @@
+<template>
+  <div class="image-panel">
+    <i v-if="deletebtn" class="el-icon-error close-btn" @click="deleteFileLink"></i>
+    <el-image 
+      style="width: 100%; height: 100%"
+      :src="image.url" 
+      :preview-src-list="srcList">
+    </el-image>
+  </div>
+</template>
+
+<script>
+export default {
+  props:['image','deletebtn'],
+  data () {
+    return {
+      srcList:[]
+    }
+  },
+  methods:{
+    async deleteFileLink () {
+      const res = await this.$api.requested({
+        "classname": "system.attachment.Attachment",
+        "method": "deleteFileLink",
+        "content": {
+          "linksids":[this.image.linksid]
+        }
+      })
+      res.code === 1?this.$emit('onSuccess'):''
+    },
+  },
+  mounted () {
+    this.srcList.push(this.image.url)
+  }
+}
+
+</script>
+<style scoped>
+.demo-image__preview{
+  position: relative;
+}
+</style>

+ 42 - 6
src/components/upload/hw_obs_upload.vue

@@ -1,11 +1,21 @@
 <template>
   <div>
-    <el-button type="primary" size="small" @click="dialogUploadVisible = true" icon="el-icon-upload">上 传</el-button>
-    <el-dialog title="文件上传" :visible.sync="dialogUploadVisible" width="500px" :close-on-click-modal="false" :before-close="clearFiles">
+    <!-- 图片类型 -->
+    <div v-if="btntype === 'image'" @click="dialogUploadVisible = true" class="image-upload-btn">
+      <i class="el-icon-plus"></i>
+    </div>
+    <!-- 宽图类型 -->
+    <div v-else-if="btntype === 'limage'" @click="dialogUploadVisible = true" class="image-upload-btn limage-upload-btn">
+      <i class="el-icon-plus"></i>
+    </div>
+    <!-- 按钮类型 -->
+    <el-button v-else type="primary" size="small" @click="dialogUploadVisible = true" icon="el-icon-upload">上 传</el-button>
+    <el-dialog title="文件上传" :visible.sync="dialogUploadVisible" width="500px" append-to-body :close-on-click-modal="false" :before-close="clearFiles">
       <el-upload
         style="width:100%"
         ref="my-upload"
         class="upload-demo"
+        :accept="accept"
         action="#"
         :auto-upload="false"
         :show-file-list="false"
@@ -36,7 +46,13 @@
 <script>
 
 export default {
-  props:['folderid'],
+  /*
+    folderid:文件夹id; 必填
+    btntype:展示上传按钮的类型;
+    accept:限制上传文件类型;
+    bindData:附件上传成功后对应需要绑定的数据信息
+  */
+  props:['folderid','btntype','accept','bindData'],
   data () {
     return {
       dialogUploadVisible:false,
@@ -94,16 +110,19 @@ export default {
 
     // 上传成功以后生成附件记录
     async createFileRecord (obsfilename) {
+      let obj = {
+         "serialfilename": obsfilename
+      }
+      obj = Object.assign({},obj,this.bindData)
       let param = {
         "classname": "system.attachment.huawei.OBS",
         "method": "uploadSuccess",
-        "content": {
-          "serialfilename": obsfilename
-        }
+        "content":obj
       }
       const res = await this.$api.requested(param)
       this.$emit('onSuccess')
     },
+
     clearFiles () {
       this.$refs['my-upload'].clearFiles()
       this.filelist  =[]
@@ -140,5 +159,22 @@ export default {
 .progress_panel > div > p{
   line-height: 30px;
 }
+.image-upload-btn{
+  display: flex;
+  align-items: center;
+  justify-content: space-around;
+  width: 150px;
+  height: 150px;
+  background: #FFFFFF;
+  border-radius: 4px 4px 4px 4px;
+  opacity: 1;
+  border: 1px solid #CCCCCC;
+  color: #CCCCCC;
+  font-size: 4rem;
+  cursor: pointer;
+}
+.limage-upload-btn{
+    width: 384px !important;
+}
 </style>
 

+ 4 - 0
src/main.js

@@ -12,6 +12,7 @@ import upload from './api/upload'
 
 import './style/style.css'
 import './style/theme/index.css'
+import tableLayout from './components/dynamic-table'
 
 Vue.prototype.$api = api
 
@@ -21,7 +22,10 @@ Vue.prototype.tool = tool
 
 Vue.prototype.$axios = axios
 
+Vue.prototype.tableHieght = 'calc(100vh - 302px)'
+
 Vue.config.productionTip = false;
+Vue.component('tableLayout', tableLayout)
 
 Vue.use(ElementUI);
 

+ 59 - 41
src/router/HManagement.js

@@ -1,4 +1,5 @@
-const HManagement = [{
+const HManagement = [
+  {
     path: '/role_manage',
     name: 'roles',
     meta: {
@@ -6,6 +7,14 @@ const HManagement = [{
       ast_nav:true
     },
     component: () => import(/* webpackChunkName: "about" */ '@/HManagement/roleManage/index.vue')
+  },{
+    path: '/roleEdit',
+    name: 'roles',
+    meta: {
+      title: '编辑角色',
+      ast_nav:false
+    },
+    component: () => import(/* webpackChunkName: "about" */ '@/HManagement/roleManage/modules/edit_role.vue')
   },{
     path: '/account_manage',
     name: 'users',
@@ -15,44 +24,53 @@ const HManagement = [{
     },
     component: resolve => require(['@/HManagement/accountManage/index'], resolve)
   },{
-  path: '/notice_list',
-  name: 'notice',
-  meta: {
-    title: '通报',
-    ast_nav:true
-  },
-  component: () => import(/* webpackChunkName: "about" */ '@/HManagement/notice/index.vue')
-},{
-  path: '/archives_list',
-  name: 'archives',
-  meta: {
-    title: ' 营销物料',
-    ast_nav:true
-  },
-  component: () => import(/* webpackChunkName: "about" */ '@/HManagement/archives/index.vue')
-},{
-  path: '/archives_ad_list',
-  name: 'archives_ad',
-  meta: {
-    title: ' 营销物料',
-    ast_nav:true
-  },
-  component: () => import(/* webpackChunkName: "about" */ '@/HManagement/archives/index.vue')
-},{
-  path: '/archives_sc_list',
-  name: 'archives_sc',
-  meta: {
-    title: '商学院',
-    ast_nav:true
-  },
-  component: () => import(/* webpackChunkName: "about" */ '@/HManagement/archives_sc/index.vue')
-},{
-  path: '/security_config',
-  name: 'securityConfig',
-  meta: {
-    title: '站点参数设置',
-    ast_nav:true
-  },
-  component: () => import(/* webpackChunkName: "about" */ '@/HManagement/siteManage/securityConfig/index.vue')
-}]
+    path: '/account_details',
+    name: 'users',
+    meta: {
+      title: '账号详情',
+      ast_nav:false
+    },
+    component: resolve => require(['@/HManagement/accountManage/modules/account_detail'], resolve)
+  },{
+    path: '/notice_mag_list',
+    name: 'noticemag',
+    meta: {
+      title: '通告管理',
+      ast_nav:true
+    },
+    component: () => import(/* webpackChunkName: "about" */ '@/HManagement/notice/notice_mag/index.vue')
+  },{
+    path: '/archives_list',
+    name: 'archives',
+    meta: {
+      title: ' 营销物料',
+      ast_nav:true
+    },
+    component: () => import(/* webpackChunkName: "about" */ '@/HManagement/archives/index.vue')
+  },{
+    path: '/archives_ad_list',
+    name: 'archives_ad',
+    meta: {
+      title: ' 营销物料',
+      ast_nav:true
+    },
+    component: () => import(/* webpackChunkName: "about" */ '@/HManagement/archives/index.vue')
+  },{
+    path: '/archives_sc_list',
+    name: 'archives_sc',
+    meta: {
+      title: '商学院',
+      ast_nav:true
+    },
+    component: () => import(/* webpackChunkName: "about" */ '@/HManagement/archives_sc/index.vue')
+  },{
+    path: '/security_config',
+    name: 'companyInformation',
+    meta: {
+      title: '站点参数设置',
+      ast_nav:true
+    },
+    component: () => import(/* webpackChunkName: "about" */ '@/HManagement/siteManage/securityConfig/index.vue')
+  }
+]
 export default HManagement

+ 0 - 0
src/router/SLManagement.js


+ 9 - 7
src/router/index.js

@@ -1,14 +1,16 @@
 import Vue from 'vue';
 import VueRouter from 'vue-router';
 import HManagement from './HManagement.js'
-console.log(HManagement)
-Vue.use(VueRouter);
+// import SLManagement from './SLManagement.js'
 
-//获取原型对象上的push函数
-const originalPush = VueRouter.prototype.push
-//修改原型对象中的push方法
-VueRouter.prototype.push = function push(location) {
-   return originalPush.call(this, location).catch(err => err)
+Vue.use(VueRouter);
+const RouterPush = VueRouter.prototype.push
+VueRouter.prototype.push = function push (to) {
+  return RouterPush.call(this, to).catch(err => err)
+}
+const RouterReplace = VueRouter.prototype.replace
+VueRouter.prototype.replace = function replace (to) {
+  return RouterReplace.call(this, to).catch(err => err)
 }
 let routes = [
   {

+ 16 - 1
src/store/index.js

@@ -1,17 +1,32 @@
 import Vue from 'vue';
 import Vuex from 'vuex';
+import axios from 'axios'
+import api from '../api/api'
 
 Vue.use(Vuex);
 
 export default new Vuex.Store({
   state: {
-    loading:false
+    loading:false,
+    siteinfo:{
+      attinfos:[]
+    }
   },
   getters: {
+    siteinfo:state => state.siteinfo,
+    loading:state => state.loading
   },
   mutations: {
+    setSiteInfo(state,res) {
+      state.siteinfo = res.data
+    }
   },
   actions: {
+    async querySiteInfo ({commit}, param) {
+      console.log(this.state)
+      const res = await api.requested(param)
+      commit('setSiteInfo',res)
+    },
   },
   modules: {
   },

+ 37 - 2
src/style/style.css

@@ -19,7 +19,7 @@ ul{
   color: rgb(184, 179, 179);
 }
 .container{
-  padding: 20px;
+  padding: 16px;
 }
 .flex-align-center{
   display: flex;
@@ -43,7 +43,7 @@ ul{
   margin: 10px 0;
   color: #333;
   font-weight: 500;
-  /* border-bottom:3px solid #333 */
+  font-size: 14px;
 }
 .normal-card{
   padding: 16px;
@@ -72,4 +72,39 @@ ul{
 .el-table__body tr.current-row>td{
   background-color: #69A8EA !important;
   color: #fff;
+}
+.list-table-height{
+  height:calc(100vh - 302px)
+}
+.inline-16{
+  display: inline-block;
+  margin-right: 10px;
+}
+.normal_input-width{
+  width: 240px !important;
+}
+.image-panel{
+  position: relative;
+  display: flex;
+  align-items: center;
+  justify-content: space-around;
+  width: 150px;
+  height: 150px;
+  margin-top:10px;
+  background: #FFFFFF;
+  border-radius: 4px 4px 4px 4px;
+  opacity: 1;
+  border: 1px solid #CCCCCC;
+  color: #CCCCCC;
+  font-size: 1.5rem;
+  cursor: pointer;
+  overflow: hidden;
+}
+.close-btn{
+  position: absolute;
+  right:5px;
+  top:5px;
+  color:red;
+  text-shadow: 0px 0px 3px #ccc;
+  z-index: 999;
 }

+ 17 - 0
src/utils/tool.js

@@ -1,4 +1,5 @@
 export default {
+  // 获取应用权限
   checkAuth (appname,auth) {
     // 获取应用数据
     let apps = JSON.parse(sessionStorage.getItem('active_modules'))
@@ -14,5 +15,21 @@ export default {
     let _haveAuth = auth_list.some(item=>item.option === auth)
 
     return _haveAuth
+  },
+
+  // 获取应用表格
+  tabelCol (appname) {
+    // 获取应用数据
+    let apps = JSON.parse(sessionStorage.getItem('active_modules'))
+    
+    let module_list =  apps.apps
+    // 获取当前应用数据
+    let active_modules = module_list.filter(item => {
+      return item.name === appname
+    })
+    // 获取当前应用表格数据
+    let tablecols = active_modules[0].meta.tables
+
+    return tablecols
   }
 } 

+ 2 - 2
src/views/mediaStock/modules/list.vue

@@ -28,7 +28,7 @@
               <img v-else-if="folder.postfix === 'PDF'"  src="../../../assets/file_icons/PDF.png" alt="">
               <img v-else-if="folder.postfix === 'MP4' || folder.postfix === 'AVI'"  src="../../../assets/file_icons/video.png" alt="">
               <img v-else-if="folder.postfix === 'XLS' || folder.postfix === 'XLSX'"  src="../../../assets/file_icons/xls.png" alt="">
-              <img v-else-if="folder.postfix === 'PNG' || folder.postfix === 'JPG'|| folder.postfix === 'JPEG'"  src="../../../assets/file_icons/image.png" alt="">
+              <img v-else-if="folder.postfix === 'PNG' || folder.postfix === 'JPG'|| folder.postfix === 'JPEG'"  :src="folder.url" alt="">
               <img v-else-if="folder.postfix === 'PPT' || folder.postfix === 'PPTX'"  src="../../../assets/file_icons/PPT.png" alt="">
               <img v-else-if="folder.postfix === 'FOLDER'"  src="../../../assets/file_icons/folder.png" alt="">
               <img v-else  src="../../../assets/file_icons/unknow.png" alt="">
@@ -119,7 +119,7 @@ export default {
   margin-bottom: 15px;
   cursor: pointer;
   font-size: 12px;
-  /* min-height: 110px; */
+  min-height: 110px;
 }
 
 .folder-item p{

+ 18 - 1
src/views/select_accounts/index.vue

@@ -28,7 +28,10 @@ export default {
     // 选择登录账号
     selectAccount (item) {
       sessionStorage.setItem('active_account',JSON.stringify(item))
+
       this.query_userauth()
+      
+      this.querySite_Parameter()
     },
     // 查询应用授权
     async query_userauth () {
@@ -42,7 +45,21 @@ export default {
       this.auth_data = res.data
       sessionStorage.setItem('module_info',JSON.stringify(this.auth_data))
       this.$router.push('/main')
-    }
+    },
+    // 查询文件夹ID信息
+    async querySite_Parameter () {
+      const res = await this.$api.requested({
+        "classname": "webmanage.site.site",
+        "method": "querySite_Parameter",
+        "content": {
+        }
+      })
+      let obj = {
+        appfolderid: res.data.appfolderid, // 应用附件文件夹ID
+        salematerialfolderid: res.data.salematerialfolderid // 营销物文件夹ID
+      }
+      sessionStorage.setItem('folderid',JSON.stringify(obj))
+    },
   },
   created () {
     this.account_list = JSON.parse(sessionStorage.getItem('account_list'))

BIN
yos.zip


+ 1 - 0
yos/css/339.228c4bfc.css

@@ -0,0 +1 @@
+.el-input-group__append,.el-input-group__prepend{background-color:#4f7bfd;color:#fff;border:1px solid #4f7bfd;cursor:pointer}.search-panel[data-v-237548b0]{width:300px}.role_panel{padding:10px;border:1px solid #ebe3e3;font-size:.875rem;cursor:pointer;border-radius:4px;color:#666;transition:.2s linear}.on[data-v-0096b51c]{border:1px solid #4f7bfd;background:#4f7bfd;color:#fff}.account-detail .el-descriptions__header{display:block!important}.container[data-v-9dbe2462]{padding:20px}.borderRight[data-v-9dbe2462]{border-right:1px solid #ccc}

+ 1 - 0
yos/css/348.228c4bfc.css

@@ -0,0 +1 @@
+.el-input-group__append,.el-input-group__prepend{background-color:#4f7bfd;color:#fff;border:1px solid #4f7bfd;cursor:pointer}.search-panel[data-v-237548b0]{width:300px}.role_panel{padding:10px;border:1px solid #ebe3e3;font-size:.875rem;cursor:pointer;border-radius:4px;color:#666;transition:.2s linear}.on[data-v-0096b51c]{border:1px solid #4f7bfd;background:#4f7bfd;color:#fff}.account-detail .el-descriptions__header{display:block!important}.container[data-v-9dbe2462]{padding:20px}.borderRight[data-v-9dbe2462]{border-right:1px solid #ccc}

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
yos/css/about.03500622.css


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
yos/css/app.73468aff.css


BIN
yos/favicon.ico


BIN
yos/fonts/element-icons.f1a45d74.ttf


BIN
yos/fonts/element-icons.ff18efd1.woff


BIN
yos/img/avatar.c6500dff.png


BIN
yos/img/bg.e258adac.png


+ 1 - 0
yos/img/more.58cd973b.svg

@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 22 22"><defs><style>.a{fill:none;}.b{fill:#fff;}</style></defs><g transform="translate(-262.326 -384.891)"><rect class="a" width="22" height="22" transform="translate(262.326 384.891)"/><g transform="translate(63.177 -349.635)"><rect class="b" width="22" height="2" rx="1" transform="translate(199.149 735.525)"/><rect class="b" width="22" height="2" rx="1" transform="translate(199.149 744.166)"/><rect class="b" width="22" height="2" rx="1" transform="translate(199.149 752.806)"/></g></g></svg>

+ 1 - 0
yos/img/work_station.550df9c4.svg

@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="30" height="30" viewBox="0 0 30 30"><defs><style>.a{fill:none;}.b{fill:#fff;}</style></defs><g transform="translate(80 -466)"><rect class="a" width="30" height="30" transform="translate(-80 466)"/><path class="b" d="M86.087,724.24l-4.151,4.15a2.607,2.607,0,0,1-3.688,0L74.1,724.24a2.608,2.608,0,0,1,0-3.689l4.151-4.151a2.607,2.607,0,0,1,3.688,0l4.151,4.151a2.608,2.608,0,0,1,0,3.689Zm-16.757,17.4H63.46a2.608,2.608,0,0,1-2.609-2.609v-5.87a2.609,2.609,0,0,1,2.609-2.609h5.87a2.609,2.609,0,0,1,2.609,2.609v5.87a2.608,2.608,0,0,1-2.609,2.609Zm0-13.7H63.46a2.609,2.609,0,0,1-2.609-2.609v-5.87a2.608,2.608,0,0,1,2.609-2.609h5.87a2.609,2.609,0,0,1,2.609,2.609v5.87a2.609,2.609,0,0,1-2.609,2.609Zm7.827,2.609h5.87a2.609,2.609,0,0,1,2.609,2.609v5.87a2.608,2.608,0,0,1-2.609,2.609h-5.87a2.608,2.608,0,0,1-2.609-2.609v-5.87a2.609,2.609,0,0,1,2.609-2.609Zm0,0" transform="translate(-138.851 -247.636)"/></g></svg>

+ 1 - 0
yos/index.html

@@ -0,0 +1 @@
+<!doctype html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="favicon.ico"><title>yos_manage</title><script defer="defer" type="module" src="js/chunk-vendors.cf9b356c.js"></script><script defer="defer" type="module" src="js/app.439ff59a.js"></script><link href="css/app.73468aff.css" rel="stylesheet"><script defer="defer" src="js/chunk-vendors-legacy.77346ae4.js" nomodule></script><script defer="defer" src="js/app-legacy.92294e13.js" nomodule></script></head><body><noscript><strong>We're sorry but yos_manage doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html>

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
yos/js/339-legacy.1f7ed2ff.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
yos/js/348.08dea931.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 9 - 0
yos/js/495.2e8ee323.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 9 - 0
yos/js/612-legacy.6a3b2802.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
yos/js/about-legacy.2a7abb3d.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
yos/js/about.b3786a60.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
yos/js/app-legacy.92294e13.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
yos/js/app.439ff59a.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
yos/js/chunk-vendors-legacy.77346ae4.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
yos/js/chunk-vendors.cf9b356c.js


Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio