EditDrawer.vue 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305
  1. <script lang="ts" setup>
  2. /**
  3. * @Name: EditDrawer.vue
  4. * @Description: 店铺编辑
  5. * @Author: Cheney
  6. */
  7. import { ElMessage, FormInstance, FormRules } from 'element-plus';
  8. import { useResponse } from '/@/utils/useResponse';
  9. import * as api from '/@/views/shop-information/api';
  10. const loading = ref(false);
  11. const isOpen = defineModel({ default: false });
  12. const { gridOptions, platformNumber, formSelect, companySelect } = defineProps<{
  13. gridOptions: any;
  14. platformNumber: any;
  15. formSelect: any;
  16. companySelect: any;
  17. }>();
  18. const emit = defineEmits([ 'refresh' ]);
  19. onBeforeMount(() => {
  20. replaceCol();
  21. });
  22. interface RuleForm {
  23. operatorName: string;
  24. platformNumber: string;
  25. platformName: string;
  26. country: string;
  27. brandName: string;
  28. currencyCode: string;
  29. status: number;
  30. platform: string;
  31. line: string[];
  32. ipaddress: string;
  33. company: string;
  34. belongsCompany: string;
  35. companyEnglishName: string;
  36. address: string; // 新增
  37. juridicalPerson: string; // 新增
  38. juridicalPersonCreditCard: string; // 新增
  39. juridicalPersonCreditCardAddress: string; // 新增
  40. receivablesAccount: string; // 新增
  41. receivablesAccountCompany: string; // 新增
  42. vatNumber: string; // 新增
  43. vatCompany: string; // 新增
  44. shopPhoneAndName: string | null; // 新增
  45. shopEmail: string | null; // 新增
  46. subShopPhoneAndName: string | null; // 新增
  47. subShopEmail: string | null; // 新增
  48. }
  49. const ruleFormRef = ref<FormInstance>();
  50. const ruleForm = reactive<RuleForm>({
  51. operatorName: '',
  52. platformNumber: '',
  53. platformName: '',
  54. country: '',
  55. brandName: '',
  56. currencyCode: '',
  57. status: 0,
  58. platform: '',
  59. line: [],
  60. ipaddress: '',
  61. company: '',
  62. belongsCompany: '',
  63. companyEnglishName: '',
  64. address: '',
  65. juridicalPerson: '',
  66. juridicalPersonCreditCard: '',
  67. juridicalPersonCreditCardAddress: '',
  68. receivablesAccount: '',
  69. receivablesAccountCompany: '',
  70. vatNumber: '',
  71. vatCompany: '',
  72. shopPhoneAndName: '',
  73. shopEmail: '',
  74. subShopPhoneAndName: '',
  75. subShopEmail: ''
  76. });
  77. const rules = reactive<FormRules<RuleForm>>({
  78. operatorName: [
  79. { message: 'Please input operator name', trigger: 'blur' }
  80. ],
  81. platformNumber: [
  82. { required: true, message: 'Please input platform name', trigger: 'blur' }
  83. ],
  84. platformName: [
  85. { required: true, message: 'Please input platform name', trigger: 'blur' }
  86. ],
  87. country: [
  88. { required: true, message: 'Please input country name', trigger: 'blur' }
  89. ],
  90. brandName: [
  91. { message: 'Please input brand name', trigger: 'blur' }
  92. ],
  93. currencyCode: [
  94. { required: true, message: 'Please select currency code', trigger: 'change' }
  95. ],
  96. platform: [
  97. { required: true, message: 'Please input platform name', trigger: 'blur' }
  98. ],
  99. line: [
  100. { required: true, message: 'Please select line', trigger: 'change' }
  101. ],
  102. ipaddress: [
  103. { message: 'Please input ip address', trigger: 'blur' }
  104. ],
  105. company: [
  106. { message: 'Please input activity form', trigger: 'blur' }
  107. ],
  108. belongsCompany: [ { required: true, message: 'Please Select belongsCompany', trigger: 'change' } ],
  109. companyEnglishName: [
  110. { message: 'Please input Company English Name', trigger: 'blur' }
  111. ],
  112. address: [
  113. { message: 'Please input Address', trigger: 'blur' }
  114. ],
  115. juridicalPerson: [
  116. { message: 'Please input Juridical Person', trigger: 'blur' }
  117. ],
  118. juridicalPersonCreditCard: [
  119. { message: 'Please input Juridical Person Credit Card', trigger: 'blur' }
  120. ],
  121. juridicalPersonCreditCardAddress: [
  122. { message: 'Please input Juridical Person Credit Card Address', trigger: 'blur' }
  123. ],
  124. receivablesAccount: [
  125. { message: 'Please input Receivables Account', trigger: 'blur' }
  126. ],
  127. receivablesAccountCompany: [
  128. { message: 'Please input Receivables Account Company', trigger: 'blur' }
  129. ],
  130. vatNumber: [
  131. { message: 'Please input VAT Number', trigger: 'blur' }
  132. ],
  133. vatCompany: [
  134. { message: 'Please input VAT Company', trigger: 'blur' }
  135. ],
  136. shopPhoneAndName: [
  137. { message: 'Please input Shop Email', trigger: 'blur' }
  138. ],
  139. shopEmail: [
  140. { message: 'Please input Shop Email', trigger: 'blur' }
  141. ],
  142. subShopPhoneAndName: [
  143. { message: 'Please input Shop Email', trigger: 'blur' }
  144. ],
  145. subShopEmail: [
  146. { message: 'Please input Sub Shop Email', trigger: 'blur' }
  147. ]
  148. });
  149. const submitForm = async (formEl: FormInstance | undefined) => {
  150. if (!formEl) return;
  151. await formEl.validate(async (valid, fields) => {
  152. if (valid) {
  153. await useResponse({ id: gridOptions.data[0].id, partial: 1, formData: ruleForm }, api.updateShopDetail, loading);
  154. isOpen.value = false;
  155. ElMessage.success('编辑成功');
  156. emit('refresh');
  157. } else {
  158. console.log('error submit!', fields);
  159. }
  160. });
  161. };
  162. const resetForm = (formEl: FormInstance | undefined) => {
  163. if (!formEl) return;
  164. formEl.resetFields();
  165. };
  166. function replaceCol() {
  167. const result = Object.keys(ruleForm).reduce((acc, key) => {
  168. if (key in gridOptions.data[0]) {
  169. acc[key] = gridOptions.data[0][key];
  170. }
  171. return acc;
  172. }, {} as { [key: string]: any });
  173. Object.assign(ruleForm, result);
  174. }
  175. </script>
  176. <template>
  177. <el-drawer v-model="isOpen" :title="`店铺编辑 - ${platformNumber}`" size="30%">
  178. <el-form
  179. ref="ruleFormRef"
  180. :model="ruleForm"
  181. :rules="rules"
  182. class="mx-2.5 mt-2.5"
  183. label-width="auto"
  184. status-icon>
  185. <el-form-item label="运营" prop="operatorName">
  186. <el-input v-model="ruleForm.operatorName"/>
  187. </el-form-item>
  188. <el-form-item label="平台编号" prop="platformNumber">
  189. <el-input v-model="ruleForm.platformNumber"/>
  190. </el-form-item>
  191. <el-form-item label="平台名称" prop="platformName">
  192. <el-input v-model="ruleForm.platformName"/>
  193. </el-form-item>
  194. <el-form-item label="国家" prop="country">
  195. <el-select v-model="ruleForm.country" placeholder="请选择线路">
  196. <el-option
  197. v-for="item in formSelect.country"
  198. :key="item"
  199. :label="item"
  200. :value="item">
  201. </el-option>
  202. </el-select>
  203. </el-form-item>
  204. <el-form-item label="品牌名称" prop="brandName">
  205. <el-input v-model="ruleForm.brandName"/>
  206. </el-form-item>
  207. <el-form-item label="货币代码" prop="currencyCode">
  208. <el-input v-model="ruleForm.currencyCode"/>
  209. </el-form-item>
  210. <el-form-item label="状态" prop="status">
  211. <el-switch v-model="ruleForm.status" :active-value="1" :inactive-value="0"/>
  212. </el-form-item>
  213. <el-form-item label="平台" prop="platform">
  214. <el-input v-model="ruleForm.platform"/>
  215. </el-form-item>
  216. <el-form-item label="线路" prop="line">
  217. <el-select v-model="ruleForm.line" placeholder="请选择线路">
  218. <el-option
  219. v-for="item in formSelect.line"
  220. :key="item"
  221. :label="item"
  222. :value="item">
  223. </el-option>
  224. </el-select>
  225. </el-form-item>
  226. <el-form-item label="IP 地址" prop="ipaddress">
  227. <el-input v-model="ruleForm.ipaddress"/>
  228. </el-form-item>
  229. <el-form-item label="公司" prop="company">
  230. <el-input v-model="ruleForm.company"/>
  231. </el-form-item>
  232. <el-form-item label="关联公司" prop="belongsCompany">
  233. <el-select v-model="ruleForm.belongsCompany" placeholder="请选择所属公司">
  234. <el-option
  235. v-for="item in companySelect"
  236. :key="item.id"
  237. :label="item.company"
  238. :value="item.id">
  239. </el-option>
  240. </el-select>
  241. </el-form-item>
  242. <el-form-item label="公司英文名称" prop="companyEnglishName">
  243. <el-input v-model="ruleForm.companyEnglishName"/>
  244. </el-form-item>
  245. <el-form-item label="地址" prop="address">
  246. <el-input v-model="ruleForm.address"/>
  247. </el-form-item>
  248. <el-form-item label="法人代表" prop="juridicalPerson">
  249. <el-input v-model="ruleForm.juridicalPerson"/>
  250. </el-form-item>
  251. <el-form-item label="法人信用卡" prop="juridicalPersonCreditCard">
  252. <el-input v-model="ruleForm.juridicalPersonCreditCard"/>
  253. </el-form-item>
  254. <el-form-item label="法人信用卡地址" prop="juridicalPersonCreditCardAddress">
  255. <el-input v-model="ruleForm.juridicalPersonCreditCardAddress"/>
  256. </el-form-item>
  257. <el-form-item label="应收账款账户" prop="receivablesAccount">
  258. <el-input v-model="ruleForm.receivablesAccount"/>
  259. </el-form-item>
  260. <el-form-item label="应收账款公司" prop="receivablesAccountCompany">
  261. <el-input v-model="ruleForm.receivablesAccountCompany"/>
  262. </el-form-item>
  263. <el-form-item label="VAT税号" prop="vatNumber">
  264. <el-input v-model="ruleForm.vatNumber"/>
  265. </el-form-item>
  266. <el-form-item label="VAT公司" prop="vatCompany">
  267. <el-input v-model="ruleForm.vatCompany"/>
  268. </el-form-item>
  269. <el-form-item label="主账户电话" prop="shopPhoneAndName">
  270. <el-input v-model="ruleForm.shopPhoneAndName"/>
  271. </el-form-item>
  272. <el-form-item label="主账户邮箱" prop="shopEmail">
  273. <el-input v-model="ruleForm.shopEmail"/>
  274. </el-form-item>
  275. <el-form-item label="子账户电话" prop="subShopPhoneAndName">
  276. <el-input v-model="ruleForm.subShopPhoneAndName"/>
  277. </el-form-item>
  278. <el-form-item label="子账户邮箱" prop="subShopEmail">
  279. <el-input v-model="ruleForm.subShopEmail"/>
  280. </el-form-item>
  281. <el-form-item>
  282. <div class="flex flex-1 justify-center">
  283. <el-button :loading="loading" type="primary" @click="submitForm(ruleFormRef)">确 定</el-button>
  284. <el-button @click="resetForm(ruleFormRef)">重 置</el-button>
  285. </div>
  286. </el-form-item>
  287. </el-form>
  288. </el-drawer>
  289. </template>
  290. <style scoped>
  291. </style>