add.vue 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  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"
  75. :selTitleAndName="['username', 'username']"></kSelectPop>
  76. <!-- 机器弹窗 -->
  77. <kSelectPop @selconfirm="selEquipConfirm" ref="kSelectPopEquipRef" :selOptions="selEquipOptions"
  78. :selTitleAndName="['name', 'name']"></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) => {
  134. if (e.length > 0) {
  135. cofficentForm.value.adminNames = e.join(",");
  136. } else {
  137. cofficentForm.value.adminNames = "";
  138. }
  139. kSelectPopAdminRef.value.selPopClose();
  140. };
  141. // 点击机器列表
  142. const busiEquipInpClk = () => {
  143. if (cofficentForm.value.equipmentNames) {
  144. let list = cofficentForm.value.equipmentNames.split(",");
  145. console.log(list, 'list')
  146. kSelectPopEquipRef.value.selPopOpen(list);
  147. } else {
  148. kSelectPopEquipRef.value.selPopOpen();
  149. }
  150. };
  151. // 机器选择弹窗
  152. const selEquipOptions = ref([]);
  153. const kSelectPopEquipRef = ref(null);
  154. // 机器弹窗的确定按钮
  155. const selEquipConfirm = (e) => {
  156. if (e.length > 0) {
  157. cofficentForm.value.equipmentNames = e.join(",");
  158. } else {
  159. cofficentForm.value.equipmentNames = "";
  160. }
  161. kSelectPopEquipRef.value.selPopClose();
  162. };
  163. // 获取登陆信息
  164. const user = getLoginUser();
  165. const { t } = useI18n();
  166. // 标题
  167. const titleName = ref(t("apkManage.add.addTitle"));
  168. const route = useRoute();
  169. // 刚进页面
  170. onMounted(() => {
  171. styleUrl('labelMan');
  172. // 获取商家列表
  173. getAdminList();
  174. // 获取机器列表
  175. getEquipList();
  176. const row = route.query.row ? JSON.parse(route.query.row) : {};
  177. // 看路径有没有id,有就是编辑
  178. if (row.id) {
  179. titleName.value = t("apkManage.add.editTitle");
  180. cofficentForm.value = row;
  181. // 处理商家列表,把选中的显示在商家列表
  182. cofficentForm.value.adminNames = cofficentForm.value.adminNames
  183. ? JSON.parse(cofficentForm.value.adminNames).join(",")
  184. : "";
  185. // 处理机器列表,把选中的显示在机器列表
  186. cofficentForm.value.equipmentNames = cofficentForm.value.equipmentNames
  187. ? JSON.parse(cofficentForm.value.equipmentNames).join(",")
  188. : "";
  189. }
  190. });
  191. // 表单参数
  192. let cofficentForm = ref({
  193. adminId: user.id,
  194. name: "",
  195. type: "0",
  196. adminNames: "",
  197. equipmentNames: "",
  198. });
  199. // 路由
  200. const router = useRouter();
  201. // 点击提交
  202. const onSubmit = async () => {
  203. const param = Object.assign({}, cofficentForm.value);
  204. // 判断type清空商家或机器参数
  205. if (param.type === "0") {
  206. param.equipmentNames = "";
  207. param.adminNames = JSON.stringify(param.adminNames.split(","));
  208. } else {
  209. param.adminNames = "";
  210. param.equipmentNames = JSON.stringify(param.equipmentNames.split(","));
  211. }
  212. // 如果是编辑
  213. let res;
  214. if (cofficentForm.value.id) {
  215. res = await Api_postUpdateLabel(param);
  216. } else {
  217. res = await Api_postAddLabel(param);
  218. }
  219. const { data } = res;
  220. if (data.code === "00000") {
  221. showToast(data.message);
  222. setTimeout(() => {
  223. router.back();
  224. }, 500);
  225. }
  226. };
  227. return {
  228. onSubmit,
  229. cofficentForm,
  230. titleName,
  231. selAdminOptions,
  232. kSelectPopAdminRef,
  233. selAdminConfirm,
  234. selEquipOptions,
  235. kSelectPopEquipRef,
  236. selEquipConfirm,
  237. busiAdminInpClk,
  238. busiEquipInpClk,
  239. };
  240. },
  241. };
  242. </script>
  243. <style lang="less" scoped></style>