carOwner.vue 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315
  1. <template>
  2. <div>
  3. <el-form inline>
  4. <el-form-item>
  5. <el-input
  6. v-model="obtainData.owner_phone"
  7. :placeholder="$t.value.inputPhone"
  8. />
  9. </el-form-item>
  10. <el-form-item>
  11. <el-input
  12. v-model="obtainData.owner_name"
  13. :placeholder="$t.value.inputOwnerName"
  14. />
  15. </el-form-item>
  16. <el-form-item>
  17. <el-select
  18. v-model="obtainData.is_vip"
  19. clearable
  20. @change="changeVip"
  21. >
  22. <el-option
  23. :label="$t.value.noVip"
  24. :value="false"
  25. />
  26. <el-option
  27. :label="$t.value.isVip"
  28. :value="true"
  29. />
  30. </el-select>
  31. </el-form-item>
  32. <el-form-item>
  33. <el-button
  34. type="primary"
  35. icon="Search"
  36. @click="getCarOwnerList"
  37. >{{ $t.value.Search }}</el-button>
  38. </el-form-item>
  39. <el-form-item>
  40. <el-button
  41. icon="Plus"
  42. @click="openCarOwner($t.value.AddCarOwner,'')"
  43. >{{ $t.value.new }}</el-button>
  44. </el-form-item>
  45. </el-form>
  46. <el-table
  47. :data="carOwnerList"
  48. height="605"
  49. >
  50. <el-table-column
  51. :label="$t.value.Name"
  52. align="center"
  53. width="180"
  54. prop="owner_name"
  55. />
  56. <el-table-column
  57. :label="$t.value.Surname"
  58. align="center"
  59. width="180"
  60. prop="owner_surname"
  61. />
  62. <el-table-column
  63. :label="$t.value.Mobile_Phone"
  64. align="center"
  65. prop="owner_phone"
  66. />
  67. <el-table-column
  68. :label="$t.value.Email"
  69. align="center"
  70. />
  71. <el-table-column
  72. label="vip"
  73. align="center"
  74. >
  75. <template #default="scope">
  76. <el-button
  77. :type="scope.row.is_vip ? 'success' : 'danger'"
  78. plain
  79. >
  80. {{ scope.row.is_vip ? $t.value.isVip : $t.value.noVip }}
  81. </el-button>
  82. </template>
  83. </el-table-column>
  84. <el-table-column
  85. :label="$t.value.Action"
  86. align="center"
  87. >
  88. <template #default="scope">
  89. <!-- <el-tooltip content="Bottom center" placement="bottom" effect="light">-->
  90. <!-- <el-button text type="primary" icon="MessageBox">备注</el-button>-->
  91. <!-- </el-tooltip>-->
  92. <el-button
  93. text
  94. type="primary"
  95. icon="MessageBox"
  96. >{{ $t.value.Remarks }}</el-button>
  97. <el-button
  98. icon="edit"
  99. text
  100. type="primary"
  101. @click="openCarOwner($t.value.editOwner, scope.row)"
  102. >{{ $t.value.modify }}</el-button>
  103. <el-button
  104. icon="delete"
  105. text
  106. type="primary"
  107. @click="deleteCarOwner(scope.row)"
  108. >{{ $t.value.remove }}</el-button>
  109. </template>
  110. </el-table-column>
  111. </el-table>
  112. <div style="width: 100%;display: flex;justify-content: end">
  113. <el-pagination
  114. :current-page="obtainData.page"
  115. :page-size="obtainData.pageSize"
  116. :page-sizes="[10, 30, 50, 100]"
  117. :total="carOwnerTotal"
  118. layout="total, sizes, prev, pager, next, jumper"
  119. style="padding-right: 10px"
  120. @current-change="handleCurrentChange"
  121. @size-change="handleSizeChange"
  122. />
  123. </div>
  124. <el-dialog
  125. v-model="carOwnerShow"
  126. :title="carOwnerTitle"
  127. width="650"
  128. >
  129. <el-form
  130. label-width="120"
  131. size="large"
  132. >
  133. <el-form-item :label="$t.value.Name + ':'">
  134. <el-input v-model="carOwnerData.owner_name" />
  135. </el-form-item>
  136. <el-form-item :label="$t.value.Surname + ':'">
  137. <el-input v-model="carOwnerData.owner_surname" />
  138. </el-form-item>
  139. <el-form-item :label="$t.value.Mobile_Phone + ':'">
  140. <el-input v-model="carOwnerData.owner_phone" />
  141. </el-form-item>
  142. <el-form-item label="vip:">
  143. <el-radio-group
  144. v-model="carOwnerData.is_vip"
  145. size="large"
  146. fill="#409eff"
  147. >
  148. <el-radio-button
  149. :label="$t.value.no"
  150. :value="false"
  151. />
  152. <el-radio-button
  153. :label="$t.value.yes"
  154. :value="true"
  155. />
  156. </el-radio-group>
  157. </el-form-item>
  158. <el-form-item :label="'vip' + $t.value.Expire_Time + ':'">
  159. <el-date-picker
  160. v-model="carOwnerData.vip_expire_time"
  161. type="date"
  162. :placeholder="$t.value.currentDate"
  163. />
  164. </el-form-item>
  165. </el-form>
  166. <template #footer>
  167. <el-button
  168. size="large"
  169. @click="carOwnerShow = false"
  170. >{{$t.value.Cancel}}</el-button>
  171. <el-button
  172. type="primary"
  173. size="large"
  174. @click="carOwnerOperation"
  175. >{{$t.value.Confirm}}</el-button>
  176. </template>
  177. </el-dialog>
  178. </div>
  179. </template>
  180. <script setup>
  181. import { obtainCarOwnerList, addCarOwner, editCarOwner, removeCarOwner } from '@/api/carOwner'
  182. import { onMounted, reactive, ref } from 'vue'
  183. import { ElMessage, ElMessageBox } from 'element-plus'
  184. import { t } from '@/lang/index.js'
  185. const carOwnerList = reactive([1])
  186. const carOwnerShow = ref(false)
  187. const carOwnerTitle = ref('')
  188. const carOwnerData = reactive({
  189. id: 0,
  190. owner_name: '',
  191. owner_surname: '',
  192. owner_phone: '',
  193. is_vip: false,
  194. vip_expire_time: ''
  195. })
  196. const changeVip = (val) => {
  197. obtainData.is_vip = val
  198. getCarOwnerList()
  199. }
  200. const obtainData = reactive({
  201. owner_name: '',
  202. owner_phone: '',
  203. is_vip: true,
  204. page: 1,
  205. pageSize: 10
  206. })
  207. const carOwnerTotal = ref(0)
  208. const handleCurrentChange = (val) => {
  209. obtainData.page = val
  210. getCarOwnerList()
  211. }
  212. const handleSizeChange = (val) => {
  213. obtainData.pageSize = val
  214. obtainData.page = 1
  215. getCarOwnerList()
  216. }
  217. const getCarOwnerList = () => {
  218. obtainCarOwnerList(obtainData).then(res => {
  219. if (res.code === 0) {
  220. carOwnerList.length = 0
  221. carOwnerList.push(...res.data.list)
  222. carOwnerTotal.value = res.data.total
  223. }
  224. })
  225. }
  226. const deleteCarOwner = (data) => {
  227. ElMessageBox.confirm(
  228. t.value.delOwnerTip,
  229. t.value.tip,
  230. {
  231. confirmButtonText: t.value.Confirm,
  232. cancelButtonText: t.value.Cancel,
  233. type: 'warning',
  234. }
  235. )
  236. .then(() => {
  237. removeCarOwner(data.ID).then(res => {
  238. if (res.code === 0) {
  239. ElMessage({
  240. type: 'success',
  241. message: t.value.deleteSuccess,
  242. })
  243. getCarOwnerList()
  244. } else {
  245. ElMessage({
  246. type: 'error',
  247. message: t.value.deleteFailed,
  248. })
  249. }
  250. })
  251. })
  252. .catch(() => {
  253. ElMessage({
  254. type: 'info',
  255. message: t.value.cancelDelete,
  256. })
  257. })
  258. }
  259. const openCarOwner = (head, data) => {
  260. carOwnerShow.value = true
  261. carOwnerTitle.value = head
  262. if (head === t.value.AddCarOwner) {
  263. carOwnerData.is_vip = false
  264. carOwnerData.owner_surname = ''
  265. carOwnerData.owner_name = ''
  266. carOwnerData.owner_phone = ''
  267. carOwnerData.vip_expire_time = ''
  268. } else {
  269. carOwnerData.id = data.ID
  270. carOwnerData.is_vip = data.is_vip
  271. carOwnerData.owner_surname = data.owner_surname
  272. carOwnerData.owner_phone = data.owner_phone
  273. carOwnerData.owner_name = data.owner_name
  274. carOwnerData.vip_expire_time = data.vip_expire_time
  275. }
  276. }
  277. const carOwnerOperation = async() => {
  278. if (carOwnerTitle.value === t.value.AddCarOwner) {
  279. await addCarOwner(carOwnerData).then(res => {
  280. if (res.code === 0) {
  281. ElMessage.success(t.value.addSuccess)
  282. carOwnerShow.value = false
  283. getCarOwnerList()
  284. } else {
  285. ElMessage.error(t.value.addFail)
  286. }
  287. })
  288. } else {
  289. await editCarOwner(carOwnerData).then(res => {
  290. if (res.code === 0) {
  291. ElMessage.success(t.value.editSuccess)
  292. carOwnerShow.value = false
  293. getCarOwnerList()
  294. } else {
  295. ElMessage.error(t.value.editFailed)
  296. }
  297. })
  298. }
  299. }
  300. onMounted(() => {
  301. getCarOwnerList()
  302. })
  303. </script>
  304. <style scoped lang="scss">
  305. </style>