add.vue 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  1. <template>
  2. <div class="addIdx">
  3. <s-header :name="titleName" :noback="false"></s-header>
  4. <van-form show-error-message @submit="onSubmit">
  5. <div class="kBordBott cust_vantBorder">
  6. <van-field colon :border="false" required v-model="cofficentForm.name" clearable name="name"
  7. :label="$t('labelMan.add.name')" :placeholder="$t('labelMan.add.namePlace')" :rules="[
  8. {
  9. required: true,
  10. message: $t('labelMan.add.namePlace'),
  11. },
  12. ]" />
  13. </div>
  14. <div class="kBordBott">
  15. <van-field colon :border="false" required clearable name="type" :label="$t('labelMan.add.type')"
  16. :placeholder="$t('labelMan.add.typePlace')" :rules="[
  17. {
  18. required: true,
  19. message: $t('labelMan.add.typePlace'),
  20. trigger: ['onChange', 'onSubmit'],
  21. },
  22. ]">
  23. <template #input>
  24. <van-radio-group v-model="cofficentForm.type" direction="horizontal">
  25. <van-radio name="0">{{ $t("labelMan.merchant") }}</van-radio>
  26. <van-radio name="1">{{ $t("labelMan.machine") }}</van-radio>
  27. </van-radio-group>
  28. </template>
  29. </van-field>
  30. </div>
  31. <div v-if="cofficentForm.type === '0'" class="kBordBott cust_vantBorder">
  32. <van-field colon :border="false" required @click-input="busiAdminInpClk" readonly clearable
  33. v-model="cofficentForm.adminNames" name="adminNames" :label="$t('labelMan.add.merchant')"
  34. :placeholder="$t('labelMan.add.merchantPlace')" :rules="[
  35. {
  36. required: true,
  37. message: $t('labelMan.add.merchantPlace'),
  38. },
  39. ]">
  40. <template #right-icon>
  41. <div class="l-flex-RC">
  42. <van-icon v-if="cofficentForm.adminNames" @click="cofficentForm.adminNames = ''" class="o-mr-6"
  43. name="clear" />
  44. <van-icon @click="busiAdminInpClk" name="arrow-down" />
  45. </div>
  46. </template>
  47. </van-field>
  48. </div>
  49. <div v-if="cofficentForm.type === '1'" class="kBordBott cust_vantBorder">
  50. <van-field colon :border="false" required @click-input="busiEquipInpClk" readonly clearable
  51. v-model="cofficentForm.equipmentNames" name="equipmentNames" :label="$t('labelMan.add.machine')"
  52. :placeholder="$t('labelMan.add.machinePlace')" :rules="[
  53. {
  54. required: true,
  55. message: $t('labelMan.add.machinePlace'),
  56. },
  57. ]">
  58. <template #right-icon>
  59. <div class="l-flex-RC">
  60. <van-icon v-if="cofficentForm.equipmentNames" @click="cofficentForm.equipmentNames = ''" class="o-mr-6"
  61. name="clear" />
  62. <van-icon @click="busiEquipInpClk" name="arrow-down" />
  63. </div>
  64. </template>
  65. </van-field>
  66. </div>
  67. <div style="margin: 16px">
  68. <van-button round block type="primary" native-type="submit">
  69. {{ titleName }}
  70. </van-button>
  71. </div>
  72. </van-form>
  73. <!-- 商家弹窗 -->
  74. <kSelectPop @selconfirm="selAdminConfirm" ref="kSelectPopAdminRef" :selOptions="selAdminOptions" @searchData="searchAdminData"
  75. :selTitleAndName="['username', 'id']"></kSelectPop>
  76. <!-- 机器弹窗 -->
  77. <kSelectPop @selconfirm="selEquipConfirm" ref="kSelectPopEquipRef" :selOptions="selEquipOptions" @searchData="searchEquData"
  78. :selTitleAndName="['name', 'id']"></kSelectPop>
  79. </div>
  80. </template>
  81. <script>
  82. // 导入选择组件
  83. import kSelectPop from "../../components/commom/kSelectPop/index.vue";
  84. // 导入公用方法
  85. import { getLoginUser, styleUrl } from "../../common/js/utils";
  86. // 导入接口
  87. import {
  88. Api_getListAdmin,
  89. Api_getListEquipment,
  90. Api_postAddLabel,
  91. Api_postUpdateLabel,
  92. } from "../../service/labelMan";
  93. import sHeader from "../../components/SimpleHeader";
  94. import { onMounted, ref } from "vue";
  95. import { showToast } from "vant";
  96. import { useRoute, useRouter } from "vue-router";
  97. import { useI18n } from "vue-i18n";
  98. export default {
  99. components: { sHeader, kSelectPop },
  100. setup() {
  101. const getAdminList = () => {
  102. Api_getListAdmin({ adminId: user.id }).then((res) => {
  103. console.log("res11", res);
  104. const { data } = res;
  105. if (data.code === "00000") {
  106. selAdminOptions.value = data.data;
  107. }
  108. });
  109. };
  110. const getEquipList = () => {
  111. Api_getListEquipment({ adminId: user.id }).then((res) => {
  112. console.log("res11", res);
  113. const { data } = res;
  114. if (data.code === "00000") {
  115. selEquipOptions.value = data.data;
  116. // selEquipOptions.value = data.data.slice(0, 8);
  117. }
  118. });
  119. };
  120. // 点击商家列表
  121. const busiAdminInpClk = () => {
  122. if (cofficentForm.value.adminNames) {
  123. let list = cofficentForm.value.adminNames.split(",");
  124. kSelectPopAdminRef.value.selPopOpen(list);
  125. } else {
  126. kSelectPopAdminRef.value.selPopOpen();
  127. }
  128. };
  129. // 商家选择弹窗
  130. const selAdminOptions = ref([]);
  131. const kSelectPopAdminRef = ref(null);
  132. // 商家弹窗的确定按钮
  133. const selAdminConfirm = (e, e1) => {
  134. if (e.length > 0 && e1.length > 0) {
  135. cofficentForm.value.adminNames = e.join(",");
  136. cofficentForm.value.adminIds = e1.join(",");
  137. } else {
  138. cofficentForm.value.adminNames = "";
  139. }
  140. kSelectPopAdminRef.value.selPopClose();
  141. };
  142. const searchAdminData = (e) => {
  143. // console.log("用户列表", e);
  144. selAdminOptions.value = e;
  145. }
  146. const searchEquData = (e) => {
  147. // console.log("设备列表", e);
  148. selEquipOptions.value = e;
  149. }
  150. // 点击机器列表
  151. const busiEquipInpClk = () => {
  152. if (cofficentForm.value.equipmentNames) {
  153. let list = cofficentForm.value.equipmentNames.split(",");
  154. console.log(list, 'list')
  155. kSelectPopEquipRef.value.selPopOpen(list);
  156. } else {
  157. kSelectPopEquipRef.value.selPopOpen();
  158. }
  159. };
  160. // 机器选择弹窗
  161. const selEquipOptions = ref([]);
  162. const kSelectPopEquipRef = ref(null);
  163. // 机器弹窗的确定按钮
  164. const selEquipConfirm = (e, e1) => {
  165. if (e.length > 0 && e1.length > 0) {
  166. cofficentForm.value.equipmentNames = e.join(",");
  167. cofficentForm.value.equipmentIds = e1.join(",");
  168. } else {
  169. cofficentForm.value.equipmentNames = "";
  170. cofficentForm.value.equipmentIds = "";
  171. }
  172. kSelectPopEquipRef.value.selPopClose();
  173. };
  174. // 获取登陆信息
  175. const user = getLoginUser();
  176. const { t } = useI18n();
  177. // 标题
  178. const titleName = ref(t("apkManage.add.addTitle"));
  179. const route = useRoute();
  180. // 刚进页面
  181. onMounted(() => {
  182. styleUrl('labelMan');
  183. // 获取商家列表
  184. getAdminList();
  185. // 获取机器列表
  186. getEquipList();
  187. const row = route.query.row ? JSON.parse(route.query.row) : {};
  188. // 看路径有没有id,有就是编辑
  189. if (row.id) {
  190. titleName.value = t("apkManage.add.editTitle");
  191. cofficentForm.value = row;
  192. // 处理商家列表,把选中的显示在商家列表
  193. cofficentForm.value.adminNames = cofficentForm.value.adminNames
  194. ? JSON.parse(cofficentForm.value.adminNames).join(",")
  195. : "";
  196. // 处理机器列表,把选中的显示在机器列表
  197. cofficentForm.value.equipmentNames = cofficentForm.value.equipmentNames
  198. ? JSON.parse(cofficentForm.value.equipmentNames).join(",")
  199. : "";
  200. }
  201. });
  202. // 表单参数
  203. let cofficentForm = ref({
  204. adminId: user.id,
  205. adminIds: "",
  206. name: "",
  207. type: "0",
  208. adminNames: "",
  209. equipmentNames: "",
  210. equipmentIds: "",
  211. });
  212. // 路由
  213. const router = useRouter();
  214. // 点击提交
  215. const onSubmit = async () => {
  216. const param = Object.assign({}, cofficentForm.value);
  217. // 判断type清空商家或机器参数
  218. if (param.type === "0") {
  219. param.equipmentNames = "";
  220. param.equipmentIds = "";
  221. param.adminNames = JSON.stringify(param.adminNames.split(","));
  222. param.adminIds = JSON.stringify(param.adminIds.split(","));
  223. } else {
  224. param.adminNames = "";
  225. param.adminIds = "";
  226. param.equipmentNames = JSON.stringify(param.equipmentNames.split(","));
  227. param.equipmentIds = JSON.stringify(param.equipmentIds.split(","));
  228. }
  229. // 如果是编辑
  230. let res;
  231. if (cofficentForm.value.id) {
  232. res = await Api_postUpdateLabel(param);
  233. } else {
  234. res = await Api_postAddLabel(param);
  235. }
  236. const { data } = res;
  237. if (data.code === "00000" && cofficentForm.value.id) {
  238. showToast(t('labelMan.add.editSuccess'));
  239. setTimeout(() => {
  240. router.go(-1);
  241. }, 1000);
  242. } else if (data.code === "00000" && !cofficentForm.value.id) {
  243. showToast(t('labelMan.add.addSuccess'));
  244. setTimeout(() => {
  245. router.go(-1);
  246. }, 1000);
  247. }
  248. };
  249. return {
  250. onSubmit,
  251. cofficentForm,
  252. titleName,
  253. selAdminOptions,
  254. kSelectPopAdminRef,
  255. selAdminConfirm,
  256. selEquipOptions,
  257. kSelectPopEquipRef,
  258. selEquipConfirm,
  259. busiAdminInpClk,
  260. busiEquipInpClk,
  261. searchAdminData,
  262. searchEquData,
  263. };
  264. },
  265. };
  266. </script>
  267. <style lang="less" scoped>
  268. </style>