Browse Source

超级管理员

YY 3 years ago
parent
commit
caaabaea1f

+ 78 - 5
src/views/menu/type/index.vue

@@ -1,8 +1,25 @@
 <template>
   <div id="index">
     <el-row>
-      <el-col :span="24" class="main animate__animated animate__backInRight"> test </el-col>
+      <el-col :span="24" class="main animate__animated animate__backInRight">
+        <el-col class="one">
+          <el-button type="primary" size="mini" @click="toAdd()">添加商品类型</el-button>
+        </el-col>
+        <el-col class="two">
+          <data-table :fields="fields" :opera="opera" :data="list" :total="total" @query="search" @view="toView" @edit="toEdit">
+            <!-- <template #selfbtn>
+          <el-button type="primary" size="mini" @click="toAdd()">添加商品类型</el-button>
+          </template> -->
+          </data-table>
+        </el-col>
+      </el-col>
     </el-row>
+    <e-dialog :dialog="dialog" @toClose="toClose">
+      <template slot="info">
+        <detail-1 v-if="dialog.type == '1'" :form="form" @onSubmit="onSubmit"></detail-1>
+        <info-1 :form="info" v-else></info-1>
+      </template>
+    </e-dialog>
   </div>
 </template>
 
@@ -11,12 +28,62 @@ import { mapState, createNamespacedHelpers } from 'vuex';
 export default {
   name: 'index',
   props: {},
-  components: {},
+  components: {
+    detail1: () => import('./parts/detail-1.vue'),
+    info1: () => import('./parts/info-1.vue'),
+  },
   data: function () {
-    return {};
+    return {
+      // 数据项
+      fields: [
+        { label: '类型类别', prop: 'code' },
+        { label: '类型名称', prop: 'name' },
+      ],
+      total: 0,
+      opera: [
+        { label: '详细信息', method: 'view' },
+        { label: '信息变更', method: 'edit' },
+      ],
+      // 列表
+      list: [
+        { id: '1115', code: '5', name: '水彩笔5' },
+        { id: '1116', code: '6', name: '水彩笔6' },
+        { id: '1117', code: '7', name: '水彩笔7' },
+      ],
+      // 弹框
+      dialog: { title: '信息管理', show: false, type: '1' },
+      // 添加表单
+      form: {},
+      //详情
+      info: {},
+    };
   },
   created() {},
-  methods: {},
+  methods: {
+    search() {},
+    // 添加
+    toAdd() {
+      this.dialog = { title: '信息管理', show: true, type: '1', widths: '40%' };
+    },
+    // 提交保存
+    onSubmit(data) {
+      this.toClose();
+    },
+    // 详细信息
+    toView({ data }) {
+      this.$set(this, `info`, data);
+      this.dialog = { title: '详细信息', show: true, type: '2', widths: '40%' };
+    },
+    // 信息变更
+    toEdit({ data }) {
+      this.$set(this, `form`, data);
+      this.dialog = { title: '信息管理', show: true, type: '1', widths: '40%' };
+    },
+    // 关闭弹框
+    toClose() {
+      this.dialog = { show: false };
+    },
+  },
   computed: {
     ...mapState(['user']),
   },
@@ -33,4 +100,10 @@ export default {
 };
 </script>
 
-<style lang="less" scoped></style>
+<style lang="less" scoped>
+.main {
+  .one {
+    margin: 10px 0;
+  }
+}
+</style>

+ 53 - 0
src/views/menu/type/parts/detail-1.vue

@@ -0,0 +1,53 @@
+<template>
+  <div id="detail-1">
+    <el-row>
+      <el-col :span="24" class="main">
+        <data-form :fields="fields" :data="form" :rules="rules" @save="toSave"> </data-form>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'detail-1',
+  props: {
+    form: { type: Object },
+  },
+  components: {},
+  data: function () {
+    return {
+      fields: [
+        { label: '类型类别', model: 'code' },
+        { label: '类型名称', model: 'name' },
+      ],
+      rules: {
+        code: [{ required: true, message: '请输入类型类别' }],
+        name: [{ required: true, message: '请输入类型名称' }],
+      },
+    };
+  },
+  created() {},
+  methods: {
+    toSave({ data }) {
+      this.$emit('onSubmit', data);
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    test: {
+      deep: true,
+      immediate: true,
+      handler(val) {},
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped></style>

+ 46 - 0
src/views/menu/type/parts/info-1.vue

@@ -0,0 +1,46 @@
+<template>
+  <div id="info-1">
+    <el-row>
+      <el-col :span="24" class="main">
+        <data-form :fields="fields" :data="form" :rules="rules" :needSave="false"> </data-form>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'info-1',
+  props: {
+    form: { type: Object },
+  },
+  components: {},
+  data: function () {
+    return {
+      fields: [
+        { label: '类型类别', model: 'code', readonly: true },
+        { label: '类型名称', model: 'name', readonly: true },
+      ],
+      rules: {},
+    };
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    test: {
+      deep: true,
+      immediate: true,
+      handler(val) {},
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped></style>

+ 89 - 5
src/views/menu/user/index.vue

@@ -1,8 +1,22 @@
 <template>
   <div id="index">
     <el-row>
-      <el-col :span="24" class="main animate__animated animate__backInRight"> test </el-col>
+      <el-col :span="24" class="main animate__animated animate__backInRight">
+        <el-col class="one">
+          <el-button type="primary" size="mini" @click="toAdd()">添加用户</el-button>
+        </el-col>
+        <el-col class="two">
+          <data-table :fields="fields" :opera="opera" :data="list" :total="total" @query="search" @view="toView" @edit="toEdit" @reset="toReset" @del="toDel">
+          </data-table>
+        </el-col>
+      </el-col>
     </el-row>
+    <e-dialog :dialog="dialog" @toClose="toClose">
+      <template slot="info">
+        <detail-1 v-if="dialog.type == '1'" :form="form" @onSubmit="onSubmit"></detail-1>
+        <info-1 :form="info" v-else></info-1>
+      </template>
+    </e-dialog>
   </div>
 </template>
 
@@ -11,12 +25,76 @@ import { mapState, createNamespacedHelpers } from 'vuex';
 export default {
   name: 'index',
   props: {},
-  components: {},
+  components: {
+    detail1: () => import('./parts/detail-1.vue'),
+    info1: () => import('./parts/info-1.vue'),
+  },
   data: function () {
-    return {};
+    return {
+      // 数据项
+      fields: [
+        { label: '名称', prop: 'name' },
+        { label: '电话', prop: 'phone' },
+        { label: '邮箱', prop: 'email' },
+      ],
+      total: 0,
+      opera: [
+        { label: '详细信息', method: 'view' },
+        { label: '信息变更', method: 'edit' },
+        { label: '密码重置', method: 'reset', confirm: true },
+        { label: '删除信息', method: 'del', type: 'danger', confirm: true },
+      ],
+      // 列表
+      list: [
+        {
+          id: '1111',
+          name: '法外狂徒张三',
+          phone: '12345678901',
+          email: '123@qq.com',
+          address: '翻斗花园',
+          dept: '采购部门',
+          zw: '采购人员',
+          company: '翻斗花园',
+        },
+      ],
+      // 弹框
+      dialog: { title: '信息管理', show: false, type: '1' },
+      // 添加表单
+      form: {},
+      //详情
+      info: {},
+    };
   },
   created() {},
-  methods: {},
+  methods: {
+    search() {},
+    // 添加
+    toAdd() {
+      this.dialog = { title: '信息管理', show: true, type: '1', widths: '40%' };
+    },
+    // 提交保存
+    onSubmit(data) {
+      this.toClose();
+    },
+    // 详细信息
+    toView({ data }) {
+      this.$set(this, `info`, data);
+      this.dialog = { title: '详细信息', show: true, type: '2', widths: '40%' };
+    },
+    // 信息变更
+    toEdit({ data }) {
+      this.$set(this, `form`, data);
+      this.dialog = { title: '信息管理', show: true, type: '1', widths: '40%' };
+    },
+    // 密码重置
+    toReset() {},
+    // 删除信息
+    toDel() {},
+    // 关闭弹框
+    toClose() {
+      this.dialog = { show: false };
+    },
+  },
   computed: {
     ...mapState(['user']),
   },
@@ -33,4 +111,10 @@ export default {
 };
 </script>
 
-<style lang="less" scoped></style>
+<style lang="less" scoped>
+.main {
+  .one {
+    margin: 10px 0;
+  }
+}
+</style>

+ 80 - 0
src/views/menu/user/parts/detail-1.vue

@@ -0,0 +1,80 @@
+<template>
+  <div id="detail-1">
+    <el-row>
+      <el-col :span="24" class="main">
+        <data-form :fields="fields" :data="form" :rules="rules" @save="toSave">
+          <template #options="{ item }">
+            <template v-if="item.model === 'type'">
+              <el-option v-for="item in typeList" :key="item.value" :label="item.label" :value="item.value"></el-option>
+            </template>
+          </template>
+        </data-form>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'detail-1',
+  props: {
+    form: { type: Object },
+  },
+  components: {},
+  data: function () {
+    return {
+      fields: [
+        { label: '用户类别', model: 'type', type: 'select' },
+        { label: '姓名', model: 'name' },
+        { label: '电话', model: 'phone' },
+        { label: '电子邮箱', model: 'email' },
+        { label: '联系地址', model: 'address' },
+        { label: '部门', model: 'dept' },
+        { label: '职务', model: 'zw' },
+        { label: '工作单位', model: 'company' },
+      ],
+      rules: {
+        type: [{ required: true, message: '请选择用户类别' }],
+        name: [{ required: true, message: '请输入姓名' }],
+        phone: [{ required: true, message: '请输入电话' }],
+        email: [{ required: true, message: '请输入电子邮箱' }],
+        address: [{ required: true, message: '请输入联系地址' }],
+        dept: [{ required: true, message: '请输入部门' }],
+        zw: [{ required: true, message: '请输入职务' }],
+        company: [{ required: true, message: '请输入工作单位' }],
+      },
+      typeList: [
+        { label: '超级管理员', value: '0' },
+        { label: '科室人员', value: '1' },
+        { label: '办公室人员', value: '2' },
+        { label: '采购部门', value: '3' },
+        { label: '入库管理部门', value: '4' },
+        { label: '财务部门', value: '5' },
+        { label: '供货部门', value: '6' },
+      ],
+    };
+  },
+  created() {},
+  methods: {
+    toSave({ data }) {
+      this.$emit('onSubmit', data);
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    test: {
+      deep: true,
+      immediate: true,
+      handler(val) {},
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped></style>

+ 67 - 0
src/views/menu/user/parts/info-1.vue

@@ -0,0 +1,67 @@
+<template>
+  <div id="info-1">
+    <el-row>
+      <el-col :span="24" class="main">
+        <data-form :fields="fields" :data="form" :rules="rules" :needSave="false">
+          <template #options="{ item }">
+            <template v-if="item.model === 'type'">
+              <el-option v-for="item in typeList" :key="item.value" :label="item.label" :value="item.value"></el-option>
+            </template>
+          </template>
+        </data-form>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'info-1',
+  props: {
+    form: { type: Object },
+  },
+  components: {},
+  data: function () {
+    return {
+      fields: [
+        { label: '姓名', model: 'name', readonly: true },
+        { label: '电话', model: 'phone', readonly: true },
+        { label: '电子邮箱', model: 'email', readonly: true },
+        { label: '联系地址', model: 'address', readonly: true },
+        { label: '部门', model: 'dept', readonly: true },
+        { label: '职务', model: 'zw', readonly: true },
+        { label: '工作单位', model: 'company', readonly: true },
+        { label: '用户类别', model: 'type', type: 'select', readonly: true },
+      ],
+      rules: {},
+      typeList: [
+        { label: '超级管理员', value: '0' },
+        { label: '科室人员', value: '1' },
+        { label: '办公室人员', value: '2' },
+        { label: '采购部门', value: '3' },
+        { label: '入库管理部门', value: '4' },
+        { label: '财务部门', value: '5' },
+        { label: '供货部门', value: '6' },
+      ],
+    };
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    test: {
+      deep: true,
+      immediate: true,
+      handler(val) {},
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped></style>