add.vue 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. <template>
  2. <!-- 新增账号 -->
  3. <div class="accountPerPage flex-col">
  4. <s-header :name="pageTitle" :noback="false"></s-header>
  5. <div class="accountPerBox flex-col">
  6. <van-form @submit="onSubmit">
  7. <van-field v-model="username" name="username" :label="$t('accountPer.usernameLabel')"
  8. :placeholder="$t('accountPer.usernamePlaceholder')" :rules="[
  9. { required: true, message: $t('accountPer.usernamePlaceholder') },
  10. ]" />
  11. <van-field v-model="password" name="password" type="password" :label="$t('accountPer.passwordLabel')"
  12. :placeholder="$t('accountPer.passwordPlaceholder')" />
  13. <van-field v-model="name" name="name" :label="$t('accountPer.nameLabel')"
  14. :placeholder="$t('accountPer.namePlaceholder')" :rules="[
  15. { required: true, message: $t('accountPer.namePlaceholder') },
  16. ]" />
  17. <van-field v-model="phone" name="phone" :label="$t('accountPer.phoneLabel')"
  18. :placeholder="$t('accountPer.phonePlaceholder')" :rules="[
  19. { required: true, message: $t('accountPer.phonePlaceholder') },
  20. ]" />
  21. <van-field v-model="roleText" is-link readonly :label="$t('accountPer.roleLabel')"
  22. :placeholder="$t('accountPer.rolePlaceholder')" @click="roleShow = true" />
  23. <div class="van-cell van-field">
  24. <div class="van-cell__title van-field__label">
  25. <label id="van-field-4-label" for="van-field-4-input">{{ $t("accountPer.setUp") }}:</label>
  26. </div>
  27. <div class="van-cell__value van-field__value">
  28. <div class="van-field__body">
  29. <van-switch v-model="isEnabled" /><span>{{
  30. $t("accountPer.startOrNot")
  31. }}</span>
  32. </div>
  33. </div>
  34. </div>
  35. <van-field colon :border="false" @click-input="busiEquipInpClk" readonly clearable
  36. v-model="cofficentForm.equipmentNames" :label="$t('accountPer.manageMachinesLabel')"
  37. :placeholder="$t('accountPer.manageMachinesPlaceholder')" :rules="[
  38. { required: true, message: $t('accountPer.manageMachinesPlaceholder') },
  39. ]">
  40. <template #right-icon>
  41. <div class="l-flex-RC">
  42. <van-icon v-if="cofficentForm.equipmentNames" @click="cofficentForm.equipmentNames = ''; equipmentIds = ''"
  43. class="o-mr-6" name="clear" />
  44. <van-icon @click="busiEquipInpClk" name="arrow" />
  45. </div>
  46. </template>
  47. </van-field>
  48. <!-- 操作 -->
  49. <van-row justify="space-around" style="padding: 1em">
  50. <van-button span="5" round type="primary" style="height: 2em; padding: 0 2em" native-type="submit">{{
  51. $t("accountPer.submit") }}</van-button>
  52. </van-row>
  53. <van-row justify="space-around" style="padding: 1em" v-if="pageTitle === $t('accountPer.modifyAccount')">
  54. <van-button span="5" round type="danger" style="height: 2em; padding: 0 2em" @click="deleteLoginUserFun()">{{
  55. $t("accountPer.delete") }}</van-button>
  56. </van-row>
  57. </van-form>
  58. </div>
  59. <van-popup v-model:show="roleShow" round position="bottom">
  60. <van-cascader v-model="roleList" :title="$t('accountPer.rolePlaceholder')" :options="roleOptions"
  61. @close="roleShow = false" @finish="onRoleFinish" />
  62. </van-popup>
  63. <!-- 机器弹窗 -->
  64. <kSelectPop @selconfirm="selEquipConfirm" ref="kSelectPopEquipRef" :selOptions="selEquipOptions"
  65. :selTitleAndName="['name', 'id']"></kSelectPop>
  66. </div>
  67. </template>
  68. <script>
  69. // 导入选择组件
  70. import kSelectPop from "../../components/commom/kSelectPop/index.vue";
  71. import { onMounted, reactive, toRefs, ref } from "vue";
  72. import sHeader from "../../components/SimpleHeader";
  73. import { Toast } from "vant";
  74. import {
  75. getSysRoleList,
  76. getEquipmentList,
  77. addLoginUser,
  78. updataLoginUser,
  79. deleteLoginUser,
  80. } from "../../service/accountPar/index";
  81. import { getLoginUser, styleUrl } from "../../common/js/utils";
  82. import md5 from "js-md5";
  83. import { useRouter } from "vue-router";
  84. import { useI18n } from "vue-i18n";
  85. export default {
  86. components: { sHeader, kSelectPop },
  87. setup() {
  88. const { t } = useI18n();
  89. const router = useRouter();
  90. const user = getLoginUser();
  91. const roleShow = ref(false);
  92. const roleText = ref("");
  93. const roleOptions = ref([]);
  94. const onRoleFinish = ({ selectedOptions }) => {
  95. roleShow.value = false;
  96. roleText.value = selectedOptions[0].text;
  97. };
  98. const equipmentIdShow = ref(false);
  99. const equipmentIdText = ref("");
  100. const equipmentIdsOptions = ref([]);
  101. const onEquipmentIdFinish = ({ selectedOptions }) => {
  102. equipmentIdShow.value = false;
  103. equipmentIdText.value = selectedOptions[0].text;
  104. };
  105. let addParams = reactive({
  106. username: "",
  107. password: "",
  108. name: "",
  109. phone: "",
  110. isEnabled: true,
  111. roleList: "",
  112. equipmentIds: "",
  113. companyType: "0",
  114. });
  115. const cofficentForm = ref({
  116. equipmentNames: "",
  117. });
  118. const pageTitle = ref("");
  119. onMounted(async () => {
  120. // 加载样式
  121. styleUrl('accountPer');
  122. let accoutPerSet = localStorage.getItem("accoutPerSet");
  123. if (accoutPerSet) {
  124. pageTitle.value = t("accountPer.modifyAccount");
  125. accoutPerSet = JSON.parse(accoutPerSet);
  126. addParams.id = accoutPerSet.id;
  127. addParams.username = accoutPerSet.username;
  128. addParams.name = accoutPerSet.name;
  129. addParams.phone = accoutPerSet.phone;
  130. addParams.isEnabled = accoutPerSet.isEnabled;
  131. addParams.roleList = accoutPerSet.roleList[0];
  132. addParams.equipmentIds = accoutPerSet.equipmentIds;
  133. } else {
  134. pageTitle.value = t("accountPer.addAccount");
  135. }
  136. getSysRoleListFun();
  137. getEquipmentListFun();
  138. });
  139. // 获取角色下拉列表
  140. const getSysRoleListFun = async () => {
  141. const { data } = await getSysRoleList({ adminId: user.id });
  142. if (data.code === "00000") {
  143. roleOptions.value = data.data.map((item) => {
  144. return { text: item.label, value: item.value };
  145. });
  146. if (pageTitle.value === t("accountPer.modifyAccount")) {
  147. roleText.value = roleOptions.value.filter(
  148. (v) => v.value === addParams.roleList
  149. )[0].text;
  150. }
  151. } else {
  152. Toast.fail(data.message);
  153. }
  154. };
  155. // 获取机器下拉
  156. const getEquipmentListFun = async () => {
  157. const { data } = await getEquipmentList({ adminId: user.id });
  158. if (data.code === "00000") {
  159. if (data.data.length > 0) {
  160. // 将id转成字符串类型,解决选中问题
  161. data.data.forEach((item) => {
  162. item.id = item.id + "";
  163. });
  164. }
  165. selEquipOptions.value = data.data;
  166. } else {
  167. Toast.fail(data.message);
  168. }
  169. };
  170. const onSubmit = async () => {
  171. let params = { adminId: user.id };
  172. params = Object.assign({ adminId: user.id }, addParams);
  173. if (params.password !== "") {
  174. params.password = md5(params.password);
  175. }
  176. params.roleList = [params.roleList];
  177. // if (params.equipmentIds !== 'all') {
  178. // params.equipmentIds= [params.equipmentIds];
  179. // }
  180. if (pageTitle.value === t("accountPer.modifyAccount")) {
  181. delete params.password;
  182. const { data } = await updataLoginUser(params);
  183. if (data.code === "00000") {
  184. Toast.success(t("accountPer.successfullyModifiedTheAccount"));
  185. // router.push("/accountPer");
  186. router.replace("/accountPer");
  187. } else {
  188. Toast.fail(t("accountPer.failedToModifyTheAccount"), data.message);
  189. }
  190. console.log("onSubmit", data);
  191. } else {
  192. const { data } = await addLoginUser(params);
  193. if (data.code === "00000") {
  194. Toast.success(t("accountPer.accountAddedSuccessfully"));
  195. // router.push("/accountPer");
  196. router.replace("/accountPer");
  197. } else {
  198. Toast.fail(t("accountPer.failedToAddAccount"), data.message);
  199. }
  200. console.log("onSubmit", data);
  201. }
  202. };
  203. const deleteLoginUserFun = async () => {
  204. const params = {
  205. adminId: user.id,
  206. id: addParams.id,
  207. };
  208. const { data } = await deleteLoginUser(params);
  209. if (data.code === "00000") {
  210. Toast.success(t("accountPer.successfullyDeletedTheAccount"));
  211. router.push("/accountPer");
  212. } else {
  213. Toast.fail(t("accountPer.failedToDeleteTheAccount"), data.message);
  214. }
  215. };
  216. // 点击机器列表
  217. const busiEquipInpClk = () => {
  218. if (addParams.equipmentIds) {
  219. let list = addParams.equipmentIds.split(",");
  220. console.log(list, "list");
  221. kSelectPopEquipRef.value.selPopOpen(list);
  222. } else {
  223. kSelectPopEquipRef.value.selPopOpen();
  224. }
  225. };
  226. // 机器选择弹窗
  227. const selEquipOptions = ref([]);
  228. const kSelectPopEquipRef = ref(null);
  229. // 机器弹窗的确定按钮
  230. const selEquipConfirm = (e) => {
  231. if (e.length > 0) {
  232. const list = [];
  233. // 根据id找到对应的name
  234. selEquipOptions.value.forEach(item => {
  235. e.forEach(item1 => {
  236. if (item.id === item1) {
  237. list.push(item.name);
  238. }
  239. })
  240. })
  241. cofficentForm.value.equipmentNames = list.join(",");
  242. addParams.equipmentIds = e.join(",");
  243. } else {
  244. cofficentForm.value.equipmentNames = "";
  245. addParams.equipmentIds = '';
  246. }
  247. kSelectPopEquipRef.value.selPopClose();
  248. };
  249. return {
  250. pageTitle,
  251. roleShow,
  252. roleText,
  253. roleOptions,
  254. onRoleFinish,
  255. equipmentIdShow,
  256. equipmentIdText,
  257. equipmentIdsOptions,
  258. onEquipmentIdFinish,
  259. ...toRefs(addParams),
  260. onSubmit,
  261. deleteLoginUserFun,
  262. selEquipOptions,
  263. kSelectPopEquipRef,
  264. selEquipConfirm,
  265. cofficentForm,
  266. busiEquipInpClk,
  267. };
  268. },
  269. };
  270. </script>
  271. <style lang="less" scoped>
  272. @import "../../common/style/common.less";
  273. </style>