add.vue 10 KB

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