index.vue 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. <template>
  2. <!-- 角色权限设置 -->
  3. <div class="rolePage flex-col">
  4. <s-header :name="$t('role.rolePermissionSettings')" :noback="false"></s-header>
  5. <!-- <s-header :name="$t('role.rolePermissionSettings')" :noback="false" targetPath="/accountPer"></s-header> -->
  6. <!-- <van-nav-bar :title="$t('role.rolePermissionSettings')" left-text="" left-arrow @click-left="onClickLeft" /> -->
  7. <div class="accountPerBox flex-col">
  8. <div class="searchRow flex-row justify-between">
  9. <div class="flex-col">
  10. <div class="flex-row justify-between bd3">
  11. <div class="flex-col outer4"></div>
  12. <span class="flex-col txt2">{{ $t('role.total') }}<span class="discountNumber">{{ accountPerList.length
  13. }}</span>{{ $t('role.inTotal') }}</span>
  14. </div>
  15. </div>
  16. <div class="flex-col">
  17. <div class="operBox">
  18. <div class="addBox" @click="pushAdd()">
  19. <img class="iconImg" src="../../assets/accountPer/addicon.png" />
  20. <span>{{ $t('role.addTo') }}</span>
  21. </div>
  22. </div>
  23. </div>
  24. </div>
  25. <div class="listBox">
  26. <div v-for="(item, index) in accountPerList" :key="index" class="listItem">
  27. <div class="itemBox">
  28. <div class="roleBox">
  29. <div class="itemRow">{{ item.roleName }}</div>
  30. <div class="itemRow" style="color: #8787a6;">
  31. <span v-for="(role, rindex) in item.menuCodesJson" :key="rindex" class="roleItem">{{ showRole(role)
  32. }}</span>
  33. </div>
  34. </div>
  35. <div class="operBox">
  36. <div class="operSet" @click="roleEdit(item)">
  37. <img class="iconImg" src="../../assets/edit.png" />
  38. <span class="operText">{{ $t('role.edit') }}</span>
  39. </div>
  40. <div class="operDelter" @click="roleDelete(item)">
  41. <img class="iconImg" src="../../assets/delete.png" />
  42. <span class="operText">{{ $t('role.delete') }}</span>
  43. </div>
  44. </div>
  45. </div>
  46. <!-- <div class="tipBox" v-if="item.isUse === '0'">已生效</div>
  47. <div class="tipBox isUseTip" v-if="item.isUse === '1'">已暂停</div> -->
  48. </div>
  49. </div>
  50. </div>
  51. <van-dialog v-model:show="operCheckShow" :title="$t('role.operationConfirmation')" :showConfirmButton="false"
  52. :showCancelButton="false">
  53. <div class="operCheckBox">
  54. <div class="block5 flex-col"></div>
  55. <span class="word10">{{ $t('role.pleaseConfirmAgainWhetherToOperate') }}</span>
  56. <div class="block6 flex-row justify-between">
  57. <div class="mod7 flex-col" @click="operCheckClear()">
  58. <span class="info5">{{ $t('role.illThinkAboutItAgain') }}</span>
  59. </div>
  60. <div class="mod8 flex-col" @click="operCheck()">
  61. <span class="info6">{{ $t('role.confirm') }}</span>
  62. </div>
  63. </div>
  64. </div>
  65. </van-dialog>
  66. </div>
  67. </template>
  68. <script>
  69. import { onMounted, reactive, toRefs, ref } from 'vue';
  70. import sHeader from "../../components/SimpleHeader";
  71. import { getSysRoleAdminList, deleteSysRole } from '../../service/role/index';
  72. import { showFailToast } from "vant";
  73. import { getLoginUser, styleUrl } from "../../common/js/utils";
  74. import { useRouter } from "vue-router";
  75. import { useI18n } from 'vue-i18n';
  76. export default {
  77. name: "role",
  78. components: { sHeader },
  79. setup() {
  80. // 引入语言
  81. const { t } = useI18n();
  82. const user = getLoginUser();
  83. const router = useRouter();
  84. const searchRef = ref(null);
  85. const accountPerList = ref([]); // 列表集合
  86. const operCheckShow = ref(false);
  87. const menuCodeList = [
  88. { label: t('role.deviceManagement'), value: 'M1' }, //设备管理
  89. { label: t('role.deviceView'), value: 'M2' },
  90. // { label: t('role.distributionSettings'), value: 'M3' }, //分销设置
  91. { label: t('role.accountOperation'), value: 'M3' }, //账户操作
  92. // { label: t('role.alarmHistory'), value: 'M4' },
  93. { label: t('role.orderData'), value: 'M4' }, //订单数据
  94. { label: t('role.advertisingManagement'), value: 'M5' }, //广告管理
  95. { label: t('role.taskMessage'), value: 'M6' }, //任务消息
  96. { label: t('role.discountCode'), value: 'M7' }, //优惠码
  97. { label: t('role.accountPermission'), value: 'M8' }, //账号权限
  98. { label: t('role.orderExport'), value: 'M9' }, //订单导出
  99. { label: t('role.shandeSubLedger'), value: 'M10' }, //杉德分账
  100. { label: t('role.salesRanking'), value: 'M11' }, //销售排行
  101. { label: t('role.withdrawalAccountNo'), value: 'M12' }, //提现账号
  102. { label: t('role.standbyWithdrawalAccountNo'), value: 'M13' }, //备用提现账号
  103. { label: t('role.dataOverview'), value: 'M14' }, //数据概览
  104. // { label: t('role.orderData'), value: 'M15' },
  105. { label: t('role.alarmHistory'), value: 'M15' }, //报警历史
  106. { label: t('role.orderRefund'), value: 'M16' }, //订单退款
  107. { label: t('role.systemOffline'), value: 'M17' }, //系统脱机
  108. { label: t('role.labelMan'), value: 'M18' }, //标签管理
  109. { label: t('role.apkMan'), value: 'M19' } //apk管理
  110. // { label: t('role.merchantMan'), value: 'M20' } //商户管理
  111. ];
  112. let searchParams = reactive({ adminId: user.id });
  113. // 初始化页面获取列表
  114. onMounted(async () => {
  115. // 加载样式
  116. styleUrl('role');
  117. searchGetList();
  118. });
  119. // 搜索点击
  120. const searchClick = () => { searchRef.value.showSearch(); };
  121. // 跳转添加账号
  122. const pushAdd = () => { localStorage.removeItem('roleItem'); router.push('/roleSet'); }
  123. // 查询列表
  124. const searchGetList = () => { accountPerList.value = []; getList(); }
  125. // 搜索弹窗触发搜索
  126. const search = (data) => {
  127. searchParams = Object.assign(searchParams, data);
  128. searchGetList();
  129. };
  130. // 获取设备列表数据
  131. const getList = async () => {
  132. const { data } = await getSysRoleAdminList(searchParams);
  133. if (data.code === "00000") {
  134. accountPerList.value = accountPerList.value.concat(data.data.map(item => {
  135. return {
  136. ...item,
  137. menuCodesJson: JSON.parse(item.menuCodesJson)
  138. }
  139. }));
  140. console.log(accountPerList.value);
  141. } else { showFailToast(data.message); }
  142. };
  143. const showRole = (name) => {
  144. const menuCode = menuCodeList.filter(item => item.value === name);
  145. return (menuCode.length > 0) ? menuCode[0].label : name;
  146. }
  147. let deleteRoleId = '';
  148. const roleDelete = (item) => { console.log('roleDelete', item.roleId); deleteRoleId = item.roleId; operCheckShow.value = true; }
  149. const operCheckClear = () => { operCheckShow.value = false; }
  150. const operCheck = async () => {
  151. const { data } = await deleteSysRole({ adminId: user.id, roleId: deleteRoleId });
  152. if (data.code === '00000') {
  153. operCheckShow.value = false;
  154. searchGetList();
  155. } else { showFailToast(data.message); }
  156. }
  157. const roleEdit = async (item) => { localStorage.setItem('roleItem', JSON.stringify(item)); router.push('/roleSet'); };
  158. // // 回到上一页 账号权限页
  159. // const onClickLeft = () => {
  160. // router.push('/accountPer');
  161. // };
  162. return {
  163. searchRef,
  164. searchClick,
  165. pushAdd,
  166. search,
  167. accountPerList,
  168. showRole,
  169. roleDelete,
  170. operCheckShow,
  171. operCheckClear,
  172. operCheck,
  173. roleEdit,
  174. ...toRefs(searchParams),
  175. // onClickLeft,
  176. };
  177. },
  178. };
  179. </script>
  180. <style lang="less" scoped>
  181. @import "../../common/style/common.less";
  182. </style>